MSTest,在具有测试类继承时发生[ClassCleanup]调用的时间

时间:2011-12-02 17:03:20

标签: c# inheritance mstest functional-testing

我有像这样的功能测试的层次结构

[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方法才会运行。这样做不方便,因为我在不同的模块中有一些冲突的数据,并希望在这个类测试完成后清理每个类的结果。

有什么想法吗?

4 个答案:

答案 0 :(得分:5)

我认为它与继承无关。

http://blogs.msdn.com/b/ploeh/archive/2007/01/06/classcleanupmayrunlaterthanyouthink.aspx

这就是MSTest的工作方式。

答案 1 :(得分:3)

然而Nunit的工作方式与MSTest不同。在MSTest中执行下一个类初始化之前,应首先执行ClassCleanup方法。

答案 2 :(得分:2)

这句话......

  

所有ClassCleanup方法仅在所有模块的所有测试完成时才会运行

...与ClassCleanupAttribute(强调我的)MSDN冲突......

  

标识一个方法,该方法包含在测试类中的所有测试运行之后使用的代码,并释放测试类获取的资源。这个类不能被继承。

由于初始化和清理方法是静态的,因此它们不会从公共基础继承,因此它们独立。但由于它们是静态的(我不使用VisualStudio.TestTools所以我无法验证),是否会导致您遇到的问题?

答案 3 :(得分:0)

如果可能的话,我会尝试将您的测试类拆分为2个文件并对MSTest进行两次调用。我们遇到了类似的问题,这似乎有效。