C #: использование условного атрибута для тестов - PullRequest
4 голосов
/ 11 июня 2009

Есть ли хороший способ использовать атрибут Conditional в контексте тестирования?

Я думал, что если вы можете сделать это:

[Conditional("Debug")]
public void DebugMethod()
{
    //...
}

Может быть, вы могли бы использовать для: (?)

[Conditional("Test")]
public void TestableMethod()
{
    //...
}

Ответы [ 4 ]

4 голосов
/ 11 июня 2009

Я не вижу смысла, когда есть лучшая альтернатива: тестовые проекты.

Используйте NUnit или MSTest для достижения этой функциональности более изящным способом.

1 голос
/ 11 июня 2009

Другая проблема заключается в том, что вы можете запускать свои модульные тесты в своих сборках выпуска. (Мы, конечно, делаем).

1 голос
/ 11 июня 2009

Если тестовый код не является частью продукта, его не должно быть в базе кода продукта. Я видел проекты, которые пытались включить модульные тесты в тот же проект, что и тестируемые объекты, и использовали операторы #if для включения их только в отладочные сборки, чтобы потом сожалеть об этом.

Одна очевидная проблема заключается в том, что проект приложения получает ссылку на среду модульного тестирования. Даже если вам не требуется поставлять эту платформу как часть вашего продукта (если вы можете гарантировать, что ни один код в сборке выпуска не будет ссылаться на него), она все равно пахнет немного странно.

Пусть тестовый код будет тестовым кодом, а рабочий код - рабочим кодом, , и пусть рабочий код не будет иметь никакого представления об этом .

1 голос
/ 11 июня 2009

Я бы принял ответ Мехрдада - я просто хотел дать больше контекста, когда вы могли бы использовать эти атрибуты:

Такие вещи, как [Conditional], более широко используются для управления такими вещами, как ведение журнала / трассировка или взаимодействие с исполняемым отладчиком; где имеет смысл, чтобы вызовы были в середине вашего обычного кода, но что вам может не понадобиться в определенных сборках (и #if ... и т. д. просто ужасно и легко забыть).

...