C# MSTest,当具有测试类继承时,[ClassCleanup]调用何时发生

C# MSTest,当具有测试类继承时,[ClassCleanup]调用何时发生,c#,inheritance,mstest,functional-testing,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 Module1Tests

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

[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方法仅在所有模块的所有测试完成时运行

。。。与用于ClassCleanupAttribute的冲突(强调我的)

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


由于initialize和cleanup方法是静态的,它们不是从公共基继承的,因此它们应该是独立的。但是,由于它们是静态的(我不使用VisualStudio.TestTools,因此无法验证),这是导致您出现问题的原因吗?

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

我认为这与继承无关


这就是MSTest的工作方式

但是Nunit的工作原理与MSTest不同。在MSTest中执行下一个类初始化之前,应先执行ClassCleanup方法

不管它值多少钱,
静态
和继承不能混用…@AustinSalonen感谢您的回复!但是你有什么建议?不使用基类进行测试?[ClassCleanup]方法必须是静态的。这一领域的问题/困惑似乎来自于事实,真相介于这两件事之间。是的,它必须在类中的所有测试完成之后,但不能保证它在任何其他测试开始之前。听起来可能是尽快的,或者更晚。