|
|
1
28
我现在正面临着同样的问题,对我来说,似乎有两种解决方案: 编辑: 我现在已经为此创建了一个CodePlex项目: http://legendtransactions.codeplex.com/
请注意,这并不是接口的完整定义,仅足以让您了解全局。 编辑:
下面是一个依赖ITransactionManager处理事务性工作的类的示例:
|
|
|
2
5
忽略这个测试是否是件好事。。。。 非常肮脏的黑客是检查该事务。Current不为null。 这不是一个100%的测试,因为有人可能使用TransactionScope以外的其他工具来实现这一点,但它应该防止明显的“没有麻烦拥有事务”部分。
另一种选择是故意尝试创建一个新的TransactionScope,该TransactionScope的隔离级别与将要/应该使用的隔离级别不兼容,并且
这两个选项都不是特别令人愉快的,后者非常脆弱,并且受制于TransactionScope保持不变的语义。我将测试前者,而不是后者,因为它更健壮(并且易于读取/调试)。 |
|
|
3
4
我发现了一个很好的方法来测试这个使用Moq和FluentAssertions。假设您的测试单元如下所示:
您的测试如下所示(假设MS测试):
这对我来说非常有用。 |
|
|
4
3
第一个应该是成功的“蓝天”测试。您的单元测试应该确保提交事务后,所有ACID记录都出现在数据库中。 第二个应该是“不可靠”的版本,它执行InsertFoo操作,然后在尝试InsertBar之前抛出异常。成功的测试将显示异常已经抛出,并且Foo和Bar对象都没有提交到数据库。 如果这两个都通过了,我想说你的交易范围正在正常工作。 |
|
|
5
0
在我自己思考了同样的问题之后,我得出了以下解决方案。
当您需要测试代码时,您继承了被测试的类,扩展了函数,因此您可以检测它是否被调用。
然后在类的可测试版本上执行与TransactionScope相关的测试。 |
|
|
A B · C#Excel自动调整列避免长文本时出错 9 月前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 9 月前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 9 月前 |
|
|
Duck0 · 这个对象在更高的帧率下会更快吗,因为它在Update()中? 10 月前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 10 月前 |