我有很多关于Spring Boot存储库层的问题。我的问题是:Spring Boot我们是否应该为没有任何自定义代码或查询的存储库层编写单元测试和集成测试?为存储库层编写集成测试的最佳方法是Spring Boot什么?我列出了以下两种方法。在这两种方法中,哪一种更好。是否有任何最佳实践我应该遵循另一个?如果我的上述问题#1 的答案是肯定的,那么我如何为存储库层编写单元测试Spring Boot?CurrencyRepository.java@Repositorypublic interface CurrencyRepository extends CrudRepository<Currency, String> {}由于这使用嵌入式 H2 DB,因此它是集成测试而不是单元测试。我的理解正确吗?CurrencyRepositoryIntegrationTest.java(方法 1)@RunWith(SpringRunner.class)@DataJpaTestpublic class CurrencyRepositoryIntegrationTest { @Autowired private TestEntityManager entityManager; @Autowired private CurrencyRepository repository; @Test public void testFindByName() { entityManager.persist(new Currency("USD", "United States Dollar", 2L)); Optional<Currency> c = repository.findById("USD"); assertEquals("United States Dollar", c.get().getCcyNm()); }}CurrencyRepositoryIntegrationTest2.java(方法 2)@RunWith(SpringRunner.class)@SpringBootTest(classes = DemoApplication.class)public class CurrencyRepositoryIntegrationTest2 { @Autowired private CurrencyRepository repository; @Test public void testFindByName() { repository.save(new Currency("USD", "United States Dollar", 2L)); Optional<Currency> c = repository.findById("USD"); assertEquals("United States Dollar", c.get().getCcyNm()); }}
1 回答
撒科打诨
TA贡献1934条经验 获得超2个赞
对于集成测试,有句老话“不要嘲笑你不拥有的东西”。参见例如https://markhneedham.com/blog/2009/12/13/tdd-only-mock-types-you-own/和https://8thlight.com/blog/eric-smith/2011/10/27 /thats-not-yours.html
您将编写的 JUnit 测试将模拟底层 EntityManger 以测试 spring 是否正确实现。这是我们希望 Spring 开发人员已经拥有的测试,所以我不会重复它。
对于集成测试,我猜您并不关心存储库如何或是否在下面使用 EntityManager。你只是想看看它的行为是否正确。所以第二种方法更适合。
添加回答
举报
0/150
提交
取消