在 Spring Data 中,我发现名为 JpaRepository 的非常有用的接口(interface)。因为我需要更多功能,所以我决定创建自己的存储库界面:
public interface BaseRepository<T, ID extends Serializable>
extends JpaRepository<T, ID> {
public <TA, TV> int deleteBy(SingularAttribute<T, TA> attr, TV val);
}
如您所见,这是一个通用接口(interface)。它工作正常,但我想知道如何测试它?当然,我可以为每个具体的存储库编写集成测试,但我正在寻找更好的方法。
最佳答案
与测试一样,您应该确保您知道要测试的是什么。找到这些问题的答案:
- 您想测试底层数据库吗?
- 是否要为此存储库测试 Spring Data 存储库连接器?
- 您想测试您的代码是否调用了接口(interface)上的正确方法吗?
做 #1 是没有用的:数据库供应商已经对其产品进行了数千次测试。很少有理由再次进行这项工作。
除非您怀疑 Spring Data 的代码中存在错误,否则执行 #2 是没有用的。
这给我们留下了#3。使用模拟框架来确保在适当的地方调用该方法(也可能检查参数)。
这样,您可以确保您的代码运行正确。
如果您注意到框架抛出错误或者您注意到对象没有被正确删除,您可以添加更多测试。但大多数时候,这不会因为数据库或 Spring Data 中的错误而发生。相反,您的代码不会调用 deleteBy()
,或者它会调用带有错误参数的方法。
关于spring - 测试 Spring 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24698626/