我有几个带有测试套件的课程。
每个测试类从 ClassInitialize 开始,到 ClassCleanup 结束。
我的问题是 ClassCleanup 不会在每个类结束时调用,而是仅在三个类中的所有测试之后调用。
我可以解决这个问题吗?谢谢!
[ClassInitialize]
public static void SetUpBrowser(TestContext context)
{
pageObjectBase.SetBrowser("chrome");
pagesManager.GetPageObjectBase();
}
[TestMethod]
public void FindCriticalBug()
{
bla-bla-bla();
}
[ClassCleanup]
public static void CloseBrowser()
{
pageObjectBase.Stop();
pagesManager.GeneralClearing();
}
测试是无序运行的,包括跨类的测试。请参阅这篇博文:
https://learn.microsoft.com/archive/blogs/ploeh/classcleanup-may-run-later-than-you-think https://learn.microsoft.com/archive/blogs/ploeh/classcleanup-may-run-later-than-you-think
去引用:
无论如何,这是我的输出窗口的结果:
AssemblyInitialize
TestClass1: ClassInitialize
TestClass1: TestInitialize
TestClass1: MyTestCase1
TestClass1: TestCleanup
TestClass2: ClassInitialize
TestClass2: TestInitialize
TestClass2: MyTestCase2
TestClass2: TestCleanup
TestClass1: ClassCleanup
TestClass2: ClassCleanup
AssemblyCleanup
...这并不意味着 TestClass1 的 ClassCleanup 在类中的最后一个测试用例之后立即执行!事实上,它会等待所有测试用例执行完毕,然后执行
与 TestClass2 的 ClassCleanup 一起使用。
一开始这让我很惊讶,但这显然只是因为我
还没有真正考虑清楚:因为原则上测试是
无序,不能保证 TestClass1 中的所有测试都是
立即连续执行。理论上,执行引擎
可以从 TestClass1 中选择一个测试用例,然后从 TestClass2 中选择一个测试用例,然后
另一个来自 TestClass1 等。既然是这种情况,就没有
保证一个测试类的所有测试之前都已执行过
一个新的测试类被初始化,因此所有 ClassCleanup 方法
也可以推迟到所有测试用例都执行完毕为止。
不幸的是,如果这不适合您,您将不得不查看有序测试或不同的单元测试框架。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)