我正在使用VS2010,我有以下方法调用:

[Conditional("DEBUG")]
public void VerboseLogging() { }

public void DoSomething() {
    VerboseLogging();
    Foo();
    Bar();
}

然后,我对DoSomething方法进行了单元测试,该方法检查它是否发出正确的日志记录。
[Conditional("DEBUG"), TestMethod()]
public void EnsureVerboseLog() {
    DoSomething();
    VerifyVerboseLoggingCalled(); // <-- fail in release builds since VerboseLogging() calls get eliminated.
}

似乎MSTest只能看到TestMethod并执行它(生成失败的测试),即使我已经用Conditional("DEBUG")对其进行了标记并在 Release模式下进行了编译。

因此,有没有一种方法可以根据#if以外的编译常量来排除某些测试?

最佳答案

ConditionalAttribute不会影响方法是否已编译到应用程序中。它控制是否将对方法的调用编译到应用程序中。

在此示例中,没有对EnsureVerboseLog的调用。 MSTest只会在assemlby中看到一个带有TestMethod属性的方法,并正确执行它。为了防止MSTest运行该方法,您需要执行以下操作之一

  • 不能将其编译到您的应用程序中(可以通过#if来实现)
  • 不使用TestMethod属性
  • 对其进行注释

    关于c# - 使MSTest尊重[Conditional()]属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3133988/

    10-11 02:19