我正在使用SharpArch和SharpArch.Contrib的[Transaction]属性。 Transaction属性被添加到应用程序服务方法中,如果在该方法期间抛出异常,则对任何域对象的任何更改都将回滚。从各方面来看,这都很有效。
但是,我正在编写NUnit测试以确认在适当时抛出异常(无效状态,安全错误等),但我还想确认Transaction属性存在并执行其工作以回滚更改。我有什么方法可以做到这一点吗?
我确信SharpArch.Contrib的Transaction属性是可靠的代码,但是一些未来的程序员可能会意外地从方法中删除Transaction属性或在测试期间禁用它,而单元测试不会捕获它。我是否过于谨慎?
感谢
丹
答案 0 :(得分:2)
我觉得你有点偏执,但没关系: - )
如果您信任SharpArch代码,那么我不会担心异常会被正确地抛回给您。假设它在集成或功能测试期间工作并发现任何问题。测试第三方代码只有在您不信任它或者您试图理解它时才有价值。
另一方面,如果要测试属性的存在(即验证方法是否具有适当的属性),那么您可以编写一个使用反射来检查方法签名并执行一些断言的测试。这不是很难 - 你只需使用methodinfo对象来计算方法上的属性并扫描TransactionAttribute。
答案 1 :(得分:0)
我认为测试代码的事务性非常有意义。我会在集成级别上执行此操作,当您连接到真实数据库时 - 然后很容易生成错误的数据,捕获异常并断言数据库中没有进行任何更改。
我不确定如何在单元测试级别上测试它。