当有测试类继承时,何时调用[ClassCleanup]
本文关键字:调用 ClassCleanup 何时 测试类 继承 | 更新日期: 2023-09-27 18:16:49
我有这样的功能测试层次结构
[TestClass]
class BaseClass
{
// specific methods and members relevant to all functional tests are here
// ie how to work with db
}
[TestClass]
class Module1:BaseClass
{
[ClassInitialize]
public static void Module1TestsInit(TestContext context)
{
//create some db data here, which is needed only for Module1
}
[ClassCleanup]
public static void Module1TestsCleanup()
{
//delete Module1 db data
}
}
[TestClass]
class Module2:BaseClass
{
[ClassInitialize]
public static void Module2TestsInit(TestContext context)
{
//create some db data here, which is needed only for Module2
}
[ClassCleanup]
public static void Module2TestsCleanup()
{
//delete Module2 db data
}
}
当执行测试时,我期望[ClassCleanup]
将在Module1
的所有方法完成时运行,然后在Module2
测试完成时再次运行。我有许多类,如Module1,具有相同的基类。
但是,所有ClassCleanup方法只有在所有模块的所有测试完成时才运行。这是不方便的,因为我在不同的模块中有一些冲突的数据,并希望在该类测试完成时清理每个类的结果。
任何想法吗?
我认为这与继承无关。
http://blogs.msdn.com/b/ploeh/archive/2007/01/06/classcleanupmayrunlaterthanyouthink.aspx这就是MSTest的工作方式。
编辑:原来的链接已死,回到机器链接这里
然而,Nunit的工作方式与MSTest不同。在MSTest中执行下一个类初始化之前,应该先执行ClassCleanup方法。
这个语句…
所有ClassCleanup方法只有在所有模块的所有测试完成时才运行
…与MSDN的ClassCleanupAttribute冲突
标识一个方法,该方法包含在测试类中的所有测试运行后要使用的代码,并释放测试类获得的资源。这个类不能被继承。
由于初始化和清理方法是静态的,它们不是从公共基类继承的,因此它们应该是独立的。但由于它们是静态的(我不使用VisualStudio。TestTools(因此我无法验证),这是否导致了您遇到的问题?
如果可能的话,我会尝试将您的测试类拆分为2个文件并对MSTest进行两次调用。我们在这里遇到了一些类似的问题,这似乎行得通。