Динамические утверждения на основе [InlineData] или [MemberData] - PullRequest
0 голосов
/ 20 февраля 2019

В настоящее время мы разрабатываем некоторые большие тесты компонентов.Они основаны на некоторых более сложных генераторах данных, которые создают базу данных для некоторых шаблонов.

Задача

Во время тестирования с помощью 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.

Вопрос

Как бы вы сохранили здесь какие-то динамические утверждения и передавали их непосредственно вместе с тестовыми данными с целью сохранитьметод испытаний чистый?Конечно, я также был бы счастлив, если бы вы предложили что-то совершенно другое.

...