TL; DR ваши тестовые классы должны быть public
(но ваши методы тестирования могут быть private
и / или static
)
Из соображений эффективности авторы xUnit решили не использовать BindingFlags.NonPublic
при поиске тестовых классов в средстве выполнения (таблицы метаданных MSIL не индексируют классы _5 _ (/ _ 6_) в одинаковой степени, следовательно, существует значительная разница в производительности в относительная эффективность, которой может достичь Reflection).
В результате вышеизложенного тот факт, что ваш class
равен private
, означает, что его не заберут.
Тот факт, что используется метод тестирования private
и static
, в порядке - xUnit изначально поддерживает оба этих аспекта, начиная с версии 1.0.
Обратите внимание, что расширение Visual Studio xUnit Runner, xunit.console.exe
(и графический интерфейс), задача xunit
MSBuild, Resharper и CodeRush согласованно соблюдают это (хотя, возможно, они [особенно последние два] могут сделать больше, чтобы отметить, когда Test Class ( т.е. класс [потенциально косвенно] содержащий аннотации, производные от Fact
) равен private
).
Причина, по которой TestDriven.net запускает ваш тест, заключается в том, что автор TestDriven.net приложил большие усилия, чтобы сделать его Just Work. Он внутренне использует специальную оболочку / прокладку Test Runner (называемую Adhoc Runner) для запуска вашего теста. Имейте в виду, что метод на самом деле не запускается через бегун xUnit.net, и, следовательно, любые атрибуты, которые вы добавляете в свой тест, которые имеют побочные эффекты, не будут активированы.
В частности, NUnit (и я почти уверен, что MSTest) действительно использует частное отражение [и, следовательно, выбирает тесты в private
классах], поэтому, вероятно, поэтому вам никогда не казалось важным беспокоиться раньше.
Примечание: побочный эффект / уловка, обеспечиваемая этим, заключается в том, что вы можете создать тестовый класс private
как быстрый способ Skip
выполнить все тесты в тестовом классе [и любых вложенных классах]. (К сожалению, на этой планете случаев непреднамеренного использования намного больше, чем преднамеренных случаев!)
person
Ruben Bartelink
schedule
25.04.2013