gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:08:10 25 4
gpt4 key购买 nike

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

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

//carry out deletion logic
repository.deletedata()

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

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

如何在这段代码中故意抛出错误来测试数据是否正确回滚

最佳答案

您在这里进行的测试是错误的。

您应该做两件事:编写一个测试来确保您的回滚方法执行其 promise 的操作。你在旁边测试一下。

然后,您还有另一个单元测试,它只是确保每当您的 try block 中出现异常时,都会发生对 rollback 的预期调用。

如果您确实想做一个功能测试来进行端到端测试(包括回滚),那么您必须添加一些注入(inject)机制,例如:

interface ErrorInject {
void throwException();
}

在你的 try block 中,你会得到类似的内容:

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

默认情况下,这两个“注入(inject)”对象什么也不做;但对于您的测试用例,您要确保这两个对象之一确实抛出异常。

但是当然 - 您不想在生产代码中执行类似的操作。所以 - 你最好退后一步想想我的第一个建议是否适合你。

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

关于java - 如何故意抛出错误来测试数据库回滚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39704184/

25 4 0