spring - 测试 Spring 存储库

标签 spring testing junit integration-testing spring-test

在 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)。它工作正常,但我想知道如何测试它?当然,我可以为每个具体的存储库编写集成测试,但我正在寻找更好的方法。

最佳答案

与测试一样,您应该确保您知道要测试的是什么。找到这些问题的答案:

  1. 您想测试底层数据库吗?
  2. 是否要为此存储库测试 Spring Data 存储库连接器?
  3. 您想测试您的代码是否调用了接口(interface)上的正确方法吗?

做 #1 是没有用的:数据库供应商已经对其产品进行了数千次测试。很少有理由再次进行这项工作。

除非您怀疑 Spring Data 的代码中存在错误,否则执行 #2 是没有用的。

这给我们留下了#3。使用模拟框架来确保在适当的地方调用该方法(也可能检查参数)。

这样,您可以确保您的代码运行正确。

如果您注意到框架抛出错误或者您注意到对象没有被正确删除,您可以添加更多测试。但大多数时候,这不会因为数据库或 Spring Data 中的错误而发生。相反,您的代码不会调用 deleteBy(),或者它会调用带有错误参数的方法。

关于spring - 测试 Spring 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24698626/

相关文章:

java - JUnit 测试作为 ant 目标执行失败

java - 当路径包含任何空格时,在 Java ist 中加载文件不起作用,例如%20

java - Spring Security AuthenticationException 持久化?

java - 如何防止 spring-data-rest 中 relTargetType 的 json 输出?

testing - 如何使用 Mocha/Velocity( meteor 测试)正确记录?

Java测试驱动开发

java - @Bean @Configuration可以继承吗?

java - 如何忽略 Subversion 中的目录/文件?

javascript - Protractor 中多个/并行浏览器的 E2E 测试?

java - 无法找到或加载主类 org.junit.runner.JUnitCore