我的应用程序中包含以下代码:
try {
//start transaction
repository.startTransaction();
//carry out deletion logic
repository.deletedata()
//commit all 3 transactions
repository.commitTransaction();
} catch (Exception e) {
repository.rollback();
}
如何在此代码中故意抛出error
来测试数据是否正确回滚?
答案 0 :(得分:1)
你在这里测试错误。
你应该做两件事:你编写一个测试,确保你的回滚方法做了它所承诺的事情。你可以测试一下。
然后您还有另一个单元测试,只需确保每当try块中出现异常时,就会发生对回滚的预期调用。
如果你真的想做一个功能测试来进行包括回滚的端到端测试,那么你必须添加一些注入机制,例如:< / p>
interface ErrorInject {
void throwException();
}
在你的try块中,你会有类似的东西:
try {
repository.startTransaction();
inject1.throwException();
repository.deletedata()
inject2.throwException();
repository.commitTransaction();
}
默认情况下,这两个&#34;注入&#34;物体什么都不做;但对于您的测试用例,您确保这两个对象中的一个确实抛出异常。
但当然 - 你不想在你的生产代码中做类似的事情。所以 - 你最好退后一步,想想我的第一个建议是否适合你。
一种替代方案可能是面向方面的编程;这可能允许您使用某些注释来指示您的框架在某个方法调用时失败。但正如所说:你不应该用#34;测试方面污染你的生产代码&#34;。