[英]C# Testing - Is [ClassInitialize] guaranteed to run only after previous tests are finished?
我正在使用来自Microsoft.VisualStudio.TestTools.UnitTesting.
[ClassInitialize]
和[ClassCleanup]
标签。 MSTest 2.0
我有一个测试 class,测试要求我的应用程序处于与平常不同的模式。
我在 [ClassInitialize] 中打开模式,在[ClassInitialize]
[ClassCleanup]
关闭模式。
这是行不通的,因为我从对此答案的评论中了解到:不能保证[ClassCleanup]
的执行发生在任何其他测试开始之前。 这很糟糕,因为在另一个 class 中,我进行了需要关闭该模式的测试。 该模式没有及时关闭并且它们失败了。
我可以单独为每个测试打开/关闭模式,但这是最后一个选项,因为它需要很多时间。
我可以将 class 移动到它自己的程序集,但我也不想这样做。
我通过在 class 的[ClassInitialize]
中关闭需要它关闭的模式来修复它。
但我需要知道, [ClassInitialize] 是否与[ClassCleanup]
[ClassInitialize]
共享相同的不直观行为,或者它是否保证在任何先前的测试完成之前不运行? 这将使第一次测试失败。
最好的解决方案是以某种方式强制[ClassCleanup]
在第一个测试 class 全部完成后立即运行,但这可能是不可能的。
据我目前所了解的,答案是肯定的。
您可以指望 [ClassInitialize] 不会在必要时运行得更快。 (与稍后运行的 [ClassCleanup] 相反)
但是,我的测试(当我运行所有测试时)不会在测试类之间来回跳转,我只能想象它会如何成功。 那么您真的不想以可能相互干扰的方式使用 [ClassCleanup] 和 [ClassInitialize](例如打开/关闭特殊模式)。
如果您的测试运行器确实在测试类之间跳跃,我会将敏感测试移动到不同的程序集并使用 [AssemblyCleanup] / [AssemblyInitialize]。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.