测试失败/异常后的AssemblyCleanup()

时间:2010-05-09 14:13:43

标签: c# unit-testing

我正在运行一些需要连接数据库的单元测试。当我的测试项目初始化时,会创建数据库的快照,并且在测试完成后,数据库将恢复到快照。

以下是实施:

[TestClass]
public static class AssemblyInitializer
{
    [AssemblyInitialize()]
    public static void AssemblyInit(TestContext context)
    {
        var dbss = new DatabaseSnapshot(...);    
        dbss.CreateSnapshot();
    }

    [AssemblyCleanup()]
    public static void AssemblyCleanup()
    {
        var dbss = new DatabaseSnapshot(...);
        dbss.RevertDatabase();
    }
}

现在一切正常,但是当我有一个失败的测试或一些例外时,我的问题就出现了。当然不会调用AssemblyCleanup,所以我该如何解决这个问题呢?无论发生什么,都必须恢复快照。这可能吗?

2 个答案:

答案 0 :(得分:0)

是的,不要这样做。有人可能会绊倒电源线。始终复制数据库文件的已知良好副本并附加它们。查看您使用如何附加的dbase引擎的文档。

答案 1 :(得分:-1)

您对AssemblyCleanup未被调用的假设是错误的。除非有人可能会绊倒电源线" (正如上面提到的Hans),无论是否存在异常(或测试失败),TestCleanup,ClassCleanup和AssemblyCleanup都会执行。

请注意,只要您的测试(或测试中的代码)不会产生可能引发异常的新线程,就是这样。

结论:Hans解决方案更加强大,但在大多数情况下,我发现AssemblyCleanup足够好且更直接。