Методы SetupFixture не выполняются в ожидаемом порядкеC#

Место общения программистов C#
Ответить
Anonymous
 Методы SetupFixture не выполняются в ожидаемом порядке

Сообщение Anonymous »

Описание:
Методы класса [SetupFixture] [OneTimeSetup] и [OneTimeTearDown] не выполняются должным образом. Вместо того, чтобы запускать один раз до и после всех тестов в пространстве имен, они, похоже, полностью пропускаются или выполняются в неправильном порядке.
Фоновый сценарий:
Я разрабатываю проект тестирования автоматизации, в котором собираюсь использовать методы класса [SetupFixture] [OneTimeSetup] и [OneTimeTearDown] для инициализации и очистки отчетов об экстентах на глобальном уровне. Цель состоит в том, чтобы охватить несколько классов [TestFixture] в одном отчете в формате тест > узел. Чтобы понять, как работают эти аннотации, я создал этот пример настройки для проверки поведения этих атрибутов.
Кроме того, я ищу способ выполнить метод перед каждым запуском [TestFixture], аналогично тому, как [Setup] работает для методов [Test], но на уровне прибора. Я не добавлял логику для этого в код, но если кто-то предложит способ для этого, было бы здорово.
Пример кода:
ExtentReportManager.cs

Код: Выделить всё

namespace SamplePractice.TestCases
{
[SetUpFixture]
public class ExtentReportManager
{

public ExtentReportManager() { }

[OneTimeSetUp]
public void OneTimeSetUp()
{
Console.WriteLine("Global One Time SetUp executing");
}

[OneTimeTearDown]
public void OneTimeTearDown()
{
Console.WriteLine("Global One Time Tear Down executing");
}
}
}
BaseClass.cs

Код: Выделить всё

namespace SamplePractice.TestBase
{
public class BaseClass
{
[SetUp]
public void Init()
{
Console.WriteLine("Setup Executing");
}

[TearDown]
public void Cleanup()
{
Console.WriteLine("Tear Down Executing");
}
}
}
Тестовые примеры:

Код: Выделить всё

using SamplePractice.TestBase;

namespace SamplePractice.TestCases
{
[TestFixture, Order(1)]
public class Class1 : BaseClass
{
[Test, Order(1)]
public void Class1Test1()
{
Console.WriteLine("Class1 Test 1 executing");
}

[Test, Order(2)]
public void Class1Test2()
{
Console.WriteLine("Class1 Test 2 executing");
}
}
}

using SamplePractice.TestBase;

namespace SamplePractice.TestCases
{
[TestFixture, Order(2)]
public class Class2 : BaseClass
{
[Test, Order(1)]
public void Class2Test1()
{
Console.WriteLine("Class 2 Test 1 executing");
}

[Test, Order(2)]
public void Class2Test2()
{
Console.WriteLine("Class 2 Test 2 executing");
}
}
}
Шаги, которые я попробовал:
  • Гарантированный ExtentReportManager — это открытый класс с конструктором по умолчанию. .
  • Поместил ExtentReportManager в пространство имен сборки, чтобы настроить таргетинг на всю сборку.
  • Проверяет версию NUnit (3.14.0) на предмет конфигурации бегуна.
  • Выполнение тестов с использованием средства запуска тестов Visual Studio и консоли NUnit (nunit3-console).
Вывод из Visual Studio Тестировщик:

Код: Выделить всё

Setup Executing
Class1 Test 1 executing
Tear Down Executing

Setup Executing
Class1 Test 2 executing
Tear Down Executing

Setup Executing
Class 2 Test 1 executing
Tear Down Executing

Setup Executing
Class 2 Test 2 executing
Tear Down Executing
Вывод из консоли NUnit:

Код: Выделить всё

Setup Executing
Class1 Test 1 executing
Tear Down Executing
Setup Executing
Class1 Test 2 executing
Tear Down Executing
Setup Executing
Class 2 Test 1 executing
Tear Down Executing
Setup Executing
Class 2 Test 2 executing
Tear Down Executing
Global One Time SetUp executing
Global One Time Tear Down executing
Ожидаемый результат:

Код: Выделить всё

Global One Time SetUp executing
Setup Executing
Class1 Test 1 executing
Tear Down Executing
Setup Executing
Class1 Test 2 executing
Tear Down Executing
Setup Executing
Class 2 Test 1 executing
Tear Down Executing
Setup Executing
Class 2 Test 2 executing
Tear Down Executing
Global One Time Tear Down executing
Вопросы:
  • Почему существует разница в выводе между Visual Studio тестовый бегун и консоль NUnit? Почему методы [OneTimeSetup] и [OneTimeTearDown] в [SetUpFixture] не выполняются должным образом?
  • Как выполнить метод перед каждым запуском [TestFixture], аналогично [SetUp] для [ Test], но на уровне прибора.
Шаги, которые я пробовал:
  • Обеспеченный ExtentReportManager — это общедоступный класс с конструктором по умолчанию.
  • Размещен ExtentReportManager в пространстве имен сборки, чтобы настроить таргетинг на всю сборку.
  • Проверяет версию NUnit (3.14). .0) для конфигурации бегуна.
  • Выполняли тесты с использованием средства запуска тестов Visual Studio и консоли NUnit (nunit3-console).
Ожидаемый результат:

Код: Выделить всё

Global One Time SetUp executing Setup Executing Class1 Test 1 executing Tear Down Executing Setup Executing Class1 Test 2 executing Tear Down Executing Setup Executing Class 2 Test 1 executing Tear Down Executing Setup Executing Class 2 Test 2 executing Tear Down Executing Global One Time Tear Down executing


Подробнее здесь: https://stackoverflow.com/questions/789 ... cted-order
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»