使MSTest尊重[Conditional()]属性?

cha*_*rit 6 c# mstest

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

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

public void DoSomething() {
    VerboseLogging();
    Foo();
    Bar();
}
Run Code Online (Sandbox Code Playgroud)

然后我对该DoSomething方法进行了单元测试,检查它是否发出了正确的日志记录.

[Conditional("DEBUG"), TestMethod()]
public void EnsureVerboseLog() {
    DoSomething();
    VerifyVerboseLoggingCalled(); // <-- fail in release builds since VerboseLogging() calls get eliminated.
}
Run Code Online (Sandbox Code Playgroud)

似乎MSTest只看到TestMethod并执行它(生成失败的测试),即使我已经标记它Conditional("DEBUG")并在发布模式下编译它.

那么,有没有办法根据编译常量排除某些测试#if

Jar*_*Par 7

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

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

  1. 不将其编译到您的应用程序中(可能通过#if's)
  2. 不使用TestMethod属性对其进行注释


Shl*_*Emi 5

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

为什么不理会明显的事情?它可读性强,可以完成所需的工作,等等...

[TestMethod]
#if !DEBUG
[Ignore]
#endif
public void AnyTest()
{
    // Will invoke for developer and not in test-server!
}
Run Code Online (Sandbox Code Playgroud)

HTH ..