我正在使用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")
标记它并在发布模式下编译它。
那么,有没有办法根据#if
以外的编译常量排除某些测试?
答案 0 :(得分:6)
ConditionalAttribute
不会影响方法是否编译到应用程序中。它控制是否将对方法的调用编译到应用程序中。
此示例中没有调用EnsureVerboseLog
。 MSTest只是在assemlby中看到一个带有TestMethod
属性的方法并正确执行它。为了防止MSTest运行该方法,您需要执行以下操作之一
答案 1 :(得分:5)
那么,有没有办法根据编译排除某些测试 常数除了#if ?
为什么忽略明显的?它的可读性,完全是想要的工作等等......
[TestMethod]
#if !DEBUG
[Ignore]
#endif
public void AnyTest()
{
// Will invoke for developer and not in test-server!
}
HTH ..
答案 2 :(得分:1)
解决方法是将Priority
属性设置为-1到您的方法。然后使用“minpriority:0”作为参数运行mstest
。
[TestMethod()]
[Priority(-1)]
public void Compute_Foo()
{
This method will not be executed
}