假设我正在测试存储库:
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserRepositoryTest {
@Test
(...)
@Test
(...)
}
我可以确定春天会加载其他存储库,但是我不能确定每次我启动这些JUnit之一时都会加载嵌入式Tomcat,服务,控制器...。
最简单的方法是什么?
我试图将一个内部@Configuration
类和一个@ComponentScan
限制在我的存储库程序包中,但是它没有用(只是被忽略了)。
答案 0 :(得分:2)
使用注释@DataJpaTest
代替@SpringBootTest
。它只加载Spring的持久性相关部分。
@RunWith(SpringRunner.class)
@DataJpaTest
public class UserRepositoryTest {
@Test
(...)
@Test
(...)
}
您会找到详细的解决方案here
如果您经常使用JdbcTemplate
,请看看this answer
答案 1 :(得分:0)
对于这个问题,似乎没有一个答案。
当然,对于JPA存储库,最好的回答是:使用@DataJpaTest(对于我的用例,请使用@JdbcTest)。但是,如果测试数据在数据库中而不是内存中,请确保使用“ @AutoConfigureTestDatabase(replace = Replace.NONE)
”。
Spring文档中还有一章专门讨论这一点:
Spring Boot的自动配置系统非常适合应用程序 但有时对于测试来说可能有点过多。它通常有助于 仅加载测试a所需的配置部分 您的应用程序的“切片”。
但是它并没有显示您可以/需要做的所有事情。
例如,我要测试一个smtpClientService。
要单独测试该服务,必须在其自己的层中进行这些特定的修改(如果省略“ @AutoConfigureWebClient”,则不会注入RestTemplateBuilder):
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureWebClient
public class smtpClientServiceTest {
@Autowired
SmtpClientService service;
@Configuration
@Import(SmtpClientConfig.class)
@ComponentScan(basePackageClasses = SmtpClientService.class)
static class TestConfiguration {
}
@Test
public void testSendMessage() {
(...)
}
}