XUnit Class Fixture (IClassFixture) 正在执行两次
XUnit Class Fixture (IClassFixture) is being executed twice
TextFixture 和测试
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();
}
}
家庭测试
[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 个浏览器实例。我今天又开始了这个项目,现在突然间 fixture 被执行了两次,它打开了两个单独的浏览器(这导致我的测试失败)。我认为 IClassFixture
应该像 NUnit 中的 [OneTimeSetUp]
属性一样只执行一次。为什么我的夹具执行了两次?
当我 运行 所有测试(所有测试 运行sProfileTest
和 HomeTest
时,就会发生这种情况。例如,如果我 运行 单独进行两个测试之一,那么只有 1 个浏览器实例打开并且测试通过。
我正在使用 XUnit 2.4.0。
- 编辑 -
当我使用时:
VS 2019(运行 所有测试):同时打开 2 个浏览器并失败。
VS 2019(调试所有测试):同时打开 2 个浏览器并失败。
Jetbrain's Rider IDE(运行 所有测试):同时打开 2 个浏览器并失败。
Jetbrain 的 Rider IDE(调试所有测试):它打开 1 个浏览器直到 HomeTest
完成,然后打开另一个浏览器 ProfileTest
,两个测试都通过(包括 LoginTest
).
这是它应该如何工作的,我以前使用 NUnit 时它曾经是这样的。
来自https://xunit.net/docs/shared-context#class-fixture
You can use the class fixture feature of xUnit.net to share a single
object instance among all tests in a test class
通知在测试中class
在你的情况下,你有两个分开的 classes HomeTest
和 ProfileTest
,不管它们都是从相同的抽象 class 派生的,它们被 xUnit 视为两个不同的测试 classes.
考虑改用 Collection Fixtures
。
https://xunit.net/docs/shared-context#collection-fixture
You can use the collection fixture feature of xUnit.net to share a
single object instance among tests in several test class
TextFixture 和测试
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();
}
}
家庭测试
[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 个浏览器实例。我今天又开始了这个项目,现在突然间 fixture 被执行了两次,它打开了两个单独的浏览器(这导致我的测试失败)。我认为 IClassFixture
应该像 NUnit 中的 [OneTimeSetUp]
属性一样只执行一次。为什么我的夹具执行了两次?
当我 运行 所有测试(所有测试 运行sProfileTest
和 HomeTest
时,就会发生这种情况。例如,如果我 运行 单独进行两个测试之一,那么只有 1 个浏览器实例打开并且测试通过。
我正在使用 XUnit 2.4.0。
- 编辑 -
当我使用时:
VS 2019(运行 所有测试):同时打开 2 个浏览器并失败。
VS 2019(调试所有测试):同时打开 2 个浏览器并失败。
Jetbrain's Rider IDE(运行 所有测试):同时打开 2 个浏览器并失败。
Jetbrain 的 Rider IDE(调试所有测试):它打开 1 个浏览器直到 HomeTest
完成,然后打开另一个浏览器 ProfileTest
,两个测试都通过(包括 LoginTest
).
这是它应该如何工作的,我以前使用 NUnit 时它曾经是这样的。
来自https://xunit.net/docs/shared-context#class-fixture
You can use the class fixture feature of xUnit.net to share a single object instance among all tests in a test class
通知在测试中class
在你的情况下,你有两个分开的 classes HomeTest
和 ProfileTest
,不管它们都是从相同的抽象 class 派生的,它们被 xUnit 视为两个不同的测试 classes.
考虑改用 Collection Fixtures
。
https://xunit.net/docs/shared-context#collection-fixture
You can use the collection fixture feature of xUnit.net to share a single object instance among tests in several test class