Есть ли какой-либо способ получить объект/данные c#, для которых тест NUnit не выполняется?

#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:

Два подхода…

  1. Предполагая, что DummyAssignmentGenerator это ваш собственный класс, переопределите его ToString() метод, чтобы отобразить все, что вы хотели бы видеть. Эта строка станет частью имени сгенерированного тестового набора, например…

    Test_SubmitAssignmentDynamicFlow(ВАША СТРОКА)

  2. Примените имя к каждому TestCaseData элементу, который вы предоставляете, используя метод SetName() fluent. В этом случае вы указываете полное отображаемое имя тестового набора, а не только часть в круглых скобках. Используйте {m}(YOUR_STRING) для того, чтобы он выглядел так же, как в первом подходе.

Если вы можете его использовать, то первый подход явно проще из двух.

Комментарии:

1. Я могу использовать первый подход, и он кажется довольно хорошим. Но проблема здесь в том, что класс присваивания имеет слишком много атрибутов, и требуется некоторое усилие, чтобы записать их все в переопределенном методе toString. Есть ли какой-нибудь простой способ сделать это тоже?

2. Это просто программирование. 🙂

3. В моем случае второй подход был более подходящим, поскольку я генерирую динамические данные, поэтому трудно перезаписать метод toString на основе многочисленных атрибутов. Я назвал каждый тестовый случай, предоставив данные тестового случая, а также зарегистрировал объект json назначения с помощью консоли. WriteLine() в тестовый случай