ClassCleanup方法运行太晚(或所有ClassInitialize方法之后)

时间:2014-03-26 18:15:28

标签: unit-testing vs-unit-testing-framework

同时运行多个[TestClass] es 时,为什么[ClassCleanup()]方法只会在最后调用?

文件:UnitTest1.cs

[TestClass]
public class UnitTest1
{
    [ClassInitialize()]
    public static void ClassInit(TestContext context)
    {

    }

    [ClassCleanup()]
    public static void ClassCleanup()
    {

    }

    [TestMethod]
    public void TestMethod1()
    {
    }
}

文件:UnitTest2.cs

[TestClass]
public class UnitTest2
{
    [ClassInitialize()]
    public static void ClassInit(TestContext context)
    {

    }

    [ClassCleanup()]
    public static void ClassCleanup()
    {

    }

    [TestMethod]
    public void TestMethod1()
    {
    }
}

执行顺序如下:

  1. UnitTest2.ClassInit()
  2. UnitTest2.TestMethod1()
  3. UnitTest1.ClassInit()
  4. UnitTest1.TestMethod1()
  5. UnitTest2.ClassCleanup()
  6. UnitTest1.ClassCleanup()
  7. 请注意,两个[ClassCleanup]方法都在集合的末尾执行;并不是在每个TestClass都“完成”之后。

    但我期望一种不同的行为:

    1. UnitTest2.ClassInit()
    2. UnitTest2.TestMethod1()
    3. UnitTest2.ClassCleanup() - 预期
    4. UnitTest1.ClassInit()
    5. UnitTest1.TestMethod1()
    6. UnitTest1.ClassCleanup() - 预期
    7. Microsoft的文档 - ClassCleanupAttribute Class说,“标识一种方法,该方法包含在测试类中的所有测试运行后要使用的代码,并释放测试类获得的资源。”

      但它似乎是迟到了!

      我该如何解决这个问题?或者找到一种在下一个ClassInitialize方法之前从同一个TestClass执行方法的方法。

0 个答案:

没有答案