Я использую 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
?
ConditionalAttribute
не влияет на то, скомпилирован ли метод в приложение. Он контролирует, компилируются ли вызовы метода в приложение.
В этом примере нет вызова EnsureVerboseLog
. MSTest просто видит метод в сборке с атрибутом TestMethod
и правильно его выполняет. Чтобы предотвратить запуск метода MSTest, вам необходимо выполнить одно из следующих действий