在这个asp.net中,我正在清理死锁。我想确保代码正确地处理它们,所以我试图编写触发死锁的NUnit测试……
DAO是按实体拆分的。每个实体都有一组测试,这些测试被Startup()和Teardown()方法包围,这些方法创建了一个事务作用域,然后在测试完成后将其回滚。这对其他一切都很有用,但对死锁完全没用。
如何使用TransactionScope和SQL2000 (包括MSDTC )设置和运行可以可靠再现的“死锁”测试?更多细节:我知道有一种情况,如果两个用户用不同的、特定的数据值调用两个函数,那么就会产生死锁。如何在NUNIT中模拟这种情况,并使死锁始终发生?
是的,我从“为什么不首先停止死锁”的行动计划开始,但是我无法控制死锁可能发生的代码--我只调用函数,它们就会死锁。
发布于 2008-10-08 21:36:54
如果死锁导致抛出异常,则需要使用Mock对象来模拟抛出的异常。
基本思想是告诉您的模拟对象框架(我喜欢TypeMock)抛出一个异常,如下所示:
MockObject mo = MockManager.MockObject(typeof(MyDeadlockException));
mock.ExpectAndThrow("MyMethod", (MyDeadlockException)mo.Object); 对于其他的模拟框架来说,这个想法基本上是一样的。
发布于 2008-10-10 03:17:22
发布于 2008-10-07 15:18:52
如果您在事务处理过程中的一个测试只做了大约5分钟的“等待”,怎么办?或者,只需编写一个测试,启动一个事务,创建一个新记录,然后在不提交的情况下更新该记录。然后,启动一个新事务,并尝试读取已创建并正在更新的记录。你会在那里陷入僵局。
https://stackoverflow.com/questions/178876
复制相似问题