Сделать уважение MSTest [Условным выражением ()] атрибутом?

Я использую 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?

6
задан chakrit 28 June 2010 в 16:07
поделиться

1 ответ

ConditionalAttribute не влияет на то, скомпилирован ли метод в приложение. Он контролирует, компилируются ли вызовы метода в приложение.

В этом примере нет вызова EnsureVerboseLog . MSTest просто видит метод в сборке с атрибутом TestMethod и правильно его выполняет. Чтобы предотвратить запуск метода MSTest, вам необходимо выполнить одно из следующих действий

  1. Не компилировать его в свое приложение (возможно с помощью # if)
  2. Не аннотировать его с помощью атрибута TestMethod
7
ответ дан 8 December 2019 в 18:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: