我正在运行一些需要连接数据库的单元测试。当我的测试项目初始化时,会创建数据库的快照,并且在测试完成后,数据库将恢复到快照。
以下是实施:
[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,所以我该如何解决这个问题呢?无论发生什么,都必须恢复快照。这可能吗?
答案 0 :(得分:0)
是的,不要这样做。有人可能会绊倒电源线。始终复制数据库文件的已知良好副本并附加它们。查看您使用如何附加的dbase引擎的文档。
答案 1 :(得分:-1)
您对AssemblyCleanup未被调用的假设是错误的。除非有人可能会绊倒电源线" (正如上面提到的Hans),无论是否存在异常(或测试失败),TestCleanup,ClassCleanup和AssemblyCleanup都会执行。
请注意,只要您的测试(或测试中的代码)不会产生可能引发异常的新线程,就是这样。
结论:Hans解决方案更加强大,但在大多数情况下,我发现AssemblyCleanup足够好且更直接。