В настоящее время мы разрабатываем некоторые большие тесты компонентов.Они основаны на некоторых более сложных генераторах данных, которые создают базу данных для некоторых шаблонов.
Задача
Во время тестирования с помощью xUnit мы выполняли тест с помощьюиз [InlineData]
:
[Theory]
[InlineData(Device.Type1, DeviceConfig.VeryHotDevice)]
[InlineData(Device.Type1, DeviceConfig.VeryColdDevice)]
public async Task TestCalculation(string deviceType, DeviceConfig deviceConfig)
Проблема, с которой я столкнулся, касается утверждений для различных значений DeviceConfig
.Мне нужно создать switch
-часть с кейсами для каждого в методе теста:
switch (simConfig)
{
case DeviceConfig.VeryHotDevice:
AssertVeryHotDevice(resultData);
break;
case DeviceConfig.VeryColdDevice:
AssertVeryVoldDevice(resultData);
break;
}
Я хотел бы получить что-то вроде следующего.Поэтому, в основном, просто передайте метод с утверждениями для конкретных [InlineData]
и .Invoke
внутри метода теста.
[Theory]
[InlineData(Device.Type1, DeviceConfig.VeryHotDevice, )]
[InlineData(Device.Type1, DeviceConfig.VeryColdDevice)]
public async Task TestCalculation(string deviceType, DeviceConfig deviceConfig, Action<ResultData> assertAction)
Не вдаваясь в подробности, я уже получил эту работу, изменив [InlineData]
на [MemberData]
с помощью этого ответа ( Лямбда-выражение в виде встроенных данных в xUnit ).
К сожалению, вы столкнулись с следующей проблемой ( Тесты MemberData отображаются как один тест вместо многих), потому что Actions
не IXunitSerializable
.
Для меня неприемлемо показывать только один тест (в то время как на самом деле это три-четыре), а также не реализовывать некоторый неудобный код беспорядкадля поддержки IXunitSerializable
.
Вопрос
Как бы вы сохранили здесь какие-то динамические утверждения и передавали их непосредственно вместе с тестовыми данными с целью сохранитьметод испытаний чистый?Конечно, я также был бы счастлив, если бы вы предложили что-то совершенно другое.