我正在使用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?
这ConditionalAttribute不会影响方法是否编译到应用程序中.它控制是否将对方法的调用编译到应用程序中.
EnsureVerboseLog此示例中没有调用.MSTest只是在assemlby中看到一个带有TestMethod属性的方法并正确执行它.为了防止MSTest运行该方法,您需要执行以下操作之一
因此,有没有一种方法可以根据#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 ..
| 归档时间: |
|
| 查看次数: |
1936 次 |
| 最近记录: |