Jos*_*osh 3 java spring unit-testing
请耐心等待,因为这是我第一次使用 Spring Boot,所以这只是我认为正在发生的事情......
我有几个用@Scheduled. 它们工作得很好,我已经配置并注入了所有依赖项。这些依赖项非常重要,依赖于互联网连接等。我将它们注释为@Lazy,因此它们仅在最后一分钟被实例化。
但是,需要标记包含计划方法的类,@Component这意味着它们是在启动时创建的。这引发了一个连锁反应,它创建了我的所有依赖项,无论我是否真的需要它们来进行我当前正在运行的测试。
当我在我们的 CI 服务器上运行我的单元测试时,它们失败了,因为服务器没有使用数据库进行身份验证(也不应该)。
测试这些@Scheduled作业的测试注入了自己的模拟,因此它们工作正常。但是,由于仍然创建类,因此完全不相关的测试会导致问题。我显然不想在这些测试中为完全不相关的类创建模拟。
如何防止@Component在测试运行时创建某些 a ?
预定作业类:
package example.scheduledtasks;
@Component
public class ScheduledJob {
private Database database;
@Autowired
public AccountsImporter(Database database) {
this.database = database;
}
@Scheduled(cron="0 0 04 * * *")
public void run() {
// Do something with the database
}
}
Run Code Online (Sandbox Code Playgroud)
配置类:
package example
@Configuration
public class ApplicationConfig {
@Bean
@Lazy
public Database database() {
return ...;// Some heavy operation I don't want to do while testing.
}
Run Code Online (Sandbox Code Playgroud)
}
我知道你说:
我显然不想在这些测试中为完全不相关的类创建模拟。
尽管如此,正如您所知,您可以轻松覆盖仅用于此测试的不需要的组件:
@RunWith(...)
@Context...
public class YourTest {
public static class TestConfiguration {
@Bean
@Primary
public Database unwantedComponent(){
return Mockito.mock(Database.class);
}
}
@Test
public void yourTest(){
...
}
}
Run Code Online (Sandbox Code Playgroud)
类似的问题/答案:在每个 Spring Boot @Test 上覆盖单个 @Configuration 类
| 归档时间: |
|
| 查看次数: |
4834 次 |
| 最近记录: |