如何故意抛出错误来测试数据库回滚?

时间:2016-09-26 13:26:47

标签: java exception transactions repository rollback

我的应用程序中包含以下代码:

try {
    //start transaction
    repository.startTransaction();

    //carry out deletion logic
    repository.deletedata()

    //commit all 3 transactions
    repository.commitTransaction();

} catch (Exception e) {    
    repository.rollback();
}

如何在此代码中故意抛出error来测试数据是否正确回滚

1 个答案:

答案 0 :(得分:1)

你在这里测试错误。

你应该做两件事:你编写一个测试,确保你的回滚方法做了它所承诺的事情。你可以测试一下。

然后您还有另一个单元测试,只需确保每当try块中出现异常时,就会发生对回滚的预期调用。

如果你真的想做一个功能测试来进行包括回滚的端到端测试,那么你必须添加一些注入机制,例如:< / p>

interface ErrorInject {
  void throwException();
}

在你的try块中,你会有类似的东西:

try {
  repository.startTransaction();
  inject1.throwException();
  repository.deletedata()
  inject2.throwException();
  repository.commitTransaction();
}

默认情况下,这两个&#34;注入&#34;物体什么都不做;但对于您的测试用例,您确保这两个对象中的一个确实抛出异常。

但当然 - 你不想在你的生产代码中做类似的事情。所以 - 你最好退后一步,想想我的第一个建议是否适合你。

一种替代方案可能是面向方面的编程;这可能允许您使用某些注释来指示您的框架在某个方法调用时失败。但正如所说:你不应该用#34;测试方面污染你的生产代码&#34;。