XUnit Class Fixture (IClassFixture) выполняется дважды - PullRequest
1 голос
/ 22 октября 2019

TextFixture и Test

public class TestFixture : IDisposable
{
    public TestFixture()
    {
        var options = new ChromeOptions();
        options.AddExcludedArgument("enable-automation");
        options.AddAdditionalCapability("useAutomationExtension", true);
        WebDriver.Init("https://localhost:44335/", Browser.Chrome, options);
        WebDriver.GetDriver.Manage().Window.Maximize();
    }

    public void Dispose()
    {
        WebDriver.Close();
    }
}

public abstract class Test : IClassFixture<TestFixture>
{

}

AuthTest

public abstract class AuthTest : Test
{
    [Fact, Priority(-1)]
    public void LoginTest()
    {
        var home = GetPage<HomePage>();
        home.LoginModal.Open();
        home.LoginModal.EnterLoginText(new Login("user", "pw"));
        home.LoginModal.Login();
        GetPage<DashboardPage>().IsAt();
    }
}

HomeTest

[TestCaseOrderer(PriorityOrderer.Name, PriorityOrderer.Assembly)]
public sealed class HomeTest : AuthTest
{

}

ProfileTest

 [TestCaseOrderer(PriorityOrderer.Name, PriorityOrderer.Assembly)]
 public sealed class ProfileTest : AuthTest
 {
     [Fact, Priority(0)]
     public void OpenProfilePageTest()
     {
         var profile = GetPage<ProfilePage>();
         profile.GoTo();
         profile.IsAt();
     }
     [Fact, Priority(1)]
     public void LogoutTest() => GetPage<DashboardPage>().Logout();

 }

Несколько дней назад я написал этот код, и он использовался для создания 1 экземпляра браузера. Я сегодня снова запустил проект, и теперь внезапно прибор запускается дважды, и он открывает два отдельных браузера (что приводит к сбою моих тестов). Я думал, что IClassFixture должен был выполняться только один раз, как атрибут [OneTimeSetUp] в NUnit. Почему мой прибор выполняется дважды?

Это происходит, когда я запускаю все тесты (все тесты запускаются ProfileTest и HomeTest). Если я, например, запускаю один из двух тестов по отдельности, то открывается только один экземпляр браузера и тест проходит успешно.

Я использую XUnit 2.4.0.

- EDIT -

Когда я использую:

VS 2019 (запустить все тесты): одновременно открывается 2 браузера и происходит сбой.

VS 2019 (отладкавсе тесты): одновременно открывается 2 браузера и происходит сбой.

Jetbrain's Rider IDE (запустить все тесты): одновременно открывается 2 браузера и происходит сбой.

Jetbrain's Rider IDE (отладка всех тестов): он открывает 1 браузер до HomeTest и затем еще один браузер для ProfileTest, и оба теста проходят (включая LoginTest).

Это последнееэто то, как это должно работать, и так было, когда я раньше использовал NUnit.

1 Ответ

1 голос
/ 23 октября 2019

С https://xunit.net/docs/shared-context#class-fixture

Вы можете использовать функцию фиксации класса в xUnit.net для совместного использования одного экземпляра объекта среди всех тестов в классе теста

Уведомление в тестовом классе

В вашем случае у вас есть два отдельных класса HomeTest и ProfileTest, независимо от того, оба они получены из одного и того же абстрагированного класса, ониобрабатывается xUnit как два разных класса тестирования.

Попробуйте вместо этого использовать Collection Fixtures.
https://xunit.net/docs/shared-context#collection-fixture

Вы можете использовать функцию фиксации коллекции xUnit.net длясовместно использовать один экземпляр объекта среди тестов в нескольких тестовых классах

...