#automated-tests #nunit #testcase #playwright #nunit-3.0
Вопрос:
Я пишу модульные тесты для сложного приложения, в котором так много правил, которые нужно проверить в одном потоке, используя NUnit и драматурга в .Net5. На самом деле дело в том, что для экономии времени на написание тестовых сценариев для драматурга (инструмент для фронтального тестирования) мы использовали библиотеку под названием Bogus для динамического создания фиктивных данных на основе правил (поскольку в тестовых случаях требуется проверить множество правил, и было гораздо сложнее записывать свежие данные в каждый случай). Я использую сценарий драматурга в тесте NUnit и предоставляю источник данных, используя [TestCaseSource("MethodName")]
для предоставления динамического объекта данных для разных случаев.
Теперь мы сталкиваемся с проблемой, что некоторые тестовые случаи проходят, а некоторые завершаются неудачно, и мы не можем определить, какой именно тестовый случай вызывает проблему, потому что данные тестового набора предоставляются динамическим источником, и в этом источнике данные генерируются фиктивной библиотекой на основе правил, которые мы сгенерировали. Кроме того, мы не можем долго просматривать тесты, поэтому мы автоматизировали процесс.
[Test] [TestCaseSource("GetDataToSubmit")] public async Task Test_SubmitAssignmentDynamicFlow(Assignment assignment) { using var playwright = await Playwright.CreateAsync(); await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false, ... }); .... private static IEnumerablelt;TestCaseDatagt; GetDataToSubmit() { //creating data for simple job var simpleAssignment = new DummyAssigmentGenerator() .... .Generate(); yield return new TestCaseData(simpleAssignment); ....
Теперь мой вопрос в том, есть ли какой-либо способ, чтобы мы могли просмотреть, каковы были фактические значения в объекте в случае сбоя, когда мы видим весь отчет о тестовых наборах? Чтобы мы могли узнать, какие определенные ценности вызывают проблемы, и в конечном итоге исправить их.
Ответ №1:
Два подхода…
- Предполагая, что
DummyAssignmentGenerator
это ваш собственный класс, переопределите егоToString()
метод, чтобы отобразить все, что вы хотели бы видеть. Эта строка станет частью имени сгенерированного тестового набора, например…Test_SubmitAssignmentDynamicFlow(ВАША СТРОКА)
- Примените имя к каждому
TestCaseData
элементу, который вы предоставляете, используя методSetName()
fluent. В этом случае вы указываете полное отображаемое имя тестового набора, а не только часть в круглых скобках. Используйте{m}(YOUR_STRING)
для того, чтобы он выглядел так же, как в первом подходе.
Если вы можете его использовать, то первый подход явно проще из двух.
Комментарии:
1. Я могу использовать первый подход, и он кажется довольно хорошим. Но проблема здесь в том, что класс присваивания имеет слишком много атрибутов, и требуется некоторое усилие, чтобы записать их все в переопределенном методе toString. Есть ли какой-нибудь простой способ сделать это тоже?
2. Это просто программирование. 🙂
3. В моем случае второй подход был более подходящим, поскольку я генерирую динамические данные, поэтому трудно перезаписать метод toString на основе многочисленных атрибутов. Я назвал каждый тестовый случай, предоставив данные тестового случая, а также зарегистрировал объект json назначения с помощью консоли. WriteLine() в тестовый случай