Получается, что я искал метод ITestClassCommand.EnumerateTestMethods ().
- Стандартный тестер xUnit.NET
будет перебирать все классы в
ваша тестовая сборка.
- Для каждого он будет проверять наличие атрибута RunWithAttribute;
это ваш шанс переопределить
Реализация ITestClassCommand
который используется для определения методов
содержащие тесты. (Хороший пример - RunWithNUnit)
- ITestClassCommand.EnumerateTestMethods () вызывается для обработки тестового класса и возврата IEnumerable из тестовых методов.
- каждый тест IMethodInfo затем передается в ITestClassCommand.EnumerateTestCommands (IMethodInfo testMethod), чтобы получить IEnumerable из ITestCommands
- Затем выполняется каждая ITestCommand, и ей предоставляется возможность вернуть результат.
В моем примере, приведенном выше, мне нужно что-то вроде:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class RunWithMyTestClassCommandAttribute : RunWithAttribute
{
public RunWithMyTestClassCommandAttribute()
: base(typeof(MyTestClassCommand)) {}
}
Тогда я мог бы украсить свой пример выше с помощью:
[RunWithMyTestClassCommand]
public class AdditionSpecification
{
static int result;
public void Because()
{
result = 2 + 2;
}
public void Result_is_non_zero()
{
Assert.True(result <> 0);
}
public void Result_is_correct()
{
Assert.Equal(4, result);
}
}
Наконец, в MyTestClassCommand я получаю возможность между EnumerateTestMethods () и EnumerateTestCommands (IMethodInfo testMethod) использовать любую логику, которую я хочу найти и создать экземпляры ITestCommand, которые выполняются как отдельные тесты.
Кстати, в процессе исследования этой проблемы я столкнулся с небольшой ошибкой в платформе xUnit.NET, когда пользовательский IMethodInfo, сгенерированный EnumerateTestMethods (), никогда не обнаруживался в EnumerateTestCommands (..), потому что он был развернут и перемотан. от бегуна или одного из заводов.
Я отправил эту проблему в проект xUnit на codeplex, и это было исправлено 30 мая , 2009 для xUnit.NET 1.5 CTP 2