2011-02-22 68 views
0

我在Visual Studio 2010中使用MSTest,并且需要在所有测试运行后恢复我的数据库。如果AssemblyCleanup超​​时,如何导致测试运行错误?

我所做的是装饰与AssemblyCleanupAttribute属性的方法。

<AssemblyCleanupAttribute()> 
Shared Sub AssemblyCleanup() 
    ' Restore my databases which takes a long time... 
End Sub 

问题是清理需要花费合理的时间,以至于达到超时。

我开始意识到发生了超时的唯一原因是,在调试模式下输出窗口报告“... QTAgent32.exe,AgentObject:清理:超时在清理剂达到了。”因此,它非常安静地失败,如果MSTest报告测试运行错误,我会爱上它。

什么是检测和报告超时的最佳方式?我的理想解决方案是将超时报告为测试运行错误。

+0

我到目前为止发现没有办法来检测超时。有一件事可以帮助其他人,如果你将清理代码作为清理脚本运行(在.testrunco​​nfig中配置,并将测试项目设置为控制台应用程序并在Main方法中调用AssemblyCleanup),那么至少超时不会导致数据库损坏。做上述操作将启动一个不同的进程,因此无论测试运行是否由于超时而完成,它都将运行到完成。 – Llyle 2011-02-27 23:22:50

回答

2

总之,你不能因为如果AssemblyCleanup超​​时 MSTest的报告错误。

如果您遇到此问题,那么在这一点上,你需要考虑是否MSTest的这个限制是对你太伟大。还有其他更好的测试框架。

如果您决定坚持使用MSTest,并且只想确保(至少)AssemblyCleanup中的代码/脚本运行完成,那么您可以选择将清理代码作为Process运行。这样即使AssemblyCleanup在内部调用一个Thread.Abort,你的Process也会运行完成。这是凌乱的,但...

0

为什么不换每个测试的内容交易,并在测试结束时回滚事务?在这里看到更多的信息:http://msdn.microsoft.com/en-us/library/bb381703(v=vs.80).aspx#dtbunttsttedp_topic7

+0

恢复数据库的目的不是恢复更改。我恢复了数据库,使得在测试运行后,我剩下一个数据库,其中包含大量数据,这意味着我可以使用它来继续使用更真实的数据进行手动测试。 – Llyle 2011-02-22 23:34:06

+0

因此,您正在使用相同的数据库实例进行手动测试和自动测试? – mellamokb 2011-02-22 23:36:58

+0

这是正确的。 AssemblyCleanup可能会在未来做其他任何事情,我只想确保在超时发生时我知道它。 – Llyle 2011-02-22 23:42:14

相关问题