Тест xUnit с использованием данных, поступающих из внешнего файла - PullRequest
0 голосов
/ 30 апреля 2019

В эти дни я пытаюсь понять, как работают тесты xUnit, и, в частности, я обнаружил, что есть 3 способа передачи данных в качестве параметров для тестирования методов класса (InlineData, ClassData и MemberData). Но вот моя проблема: есть ли шанс получить эти данные из внешнего файла? (Например, файл Json) Мне не удалось найти достаточно материалов на эту тему, спасибо за внимание!

Ответы [ 2 ]

4 голосов
/ 01 мая 2019

xUnit был разработан для расширения, в том числе через DataAttribute .

InlineData , ClassData и MemberData все они происходят от DataAttribute, который вы можете расширить для создания собственного источника данных для теории данных, в которой вы можете читать из внешнего файла и использовать, например, Json.NET для десериализации ваших данных.

Пользователь Sock написал об этом в своем блоге относительно JSON , как вы упомянули:

Связанный вопрос с данными из CSV файла: Как запустить тест XUnit с использованием данных из файла CSV

А вот два xUnit образцов:

3 голосов
/ 30 апреля 2019

Я считаю, что самый чистый способ - использовать ClassData для этого, чтобы вы могли заполнять данные для своего теста из любого места. Учтите это:

public class TestData : IEnumerable<object[]> 
{
    private IEnumerable<object[]> ReadFile() 
    {
        //read your file
    }

    public IEnumerator<object[]> GetEnumerator() 
    {
        var items = ReadFile();
        return items.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}

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

...