ed4*_*cky 4 java junit spring-boot spring-boot-test springrunner
我最近在 SpringBoot 项目中添加了一个 ApplicationStartup 类
@Component
public class ApplicationStartup
implements ApplicationListener<ApplicationReadyEvent> { ...
Run Code Online (Sandbox Code Playgroud)
它实现了 ApplicationListener。
现在,当我运行与该类无关的旧 JUNit 测试时,testrunner 尝试运行我的 StartupListener,这在这些情况下既不必要也不合适。
我的测试初始化时如何跳过 ApplicationListener?
@RunWith(SpringRunner.class)
@SpringBootTest
public class SubmissionItemManagerTest {...
Run Code Online (Sandbox Code Playgroud)
你可以嘲笑你的ApplicationStartup班级
将此声明添加到您的测试用例中:
@MockBean
private ApplicationStartup applicationStartup
Run Code Online (Sandbox Code Playgroud)
这将创建 的模拟实例ApplicationStartup并将其标记为@Primary在您的测试上下文中,从而替换 的实际实例ApplicationStartup。
您可以创建单独的应用程序类进行测试并排除测试不需要的组件:
@SpringBootApplication
@ComponentScan(excludeFilters = @ComponentScan.Filter(
type = FilterType.ASSIGNABLE_TYPE,
value = { ApplicationStartup.class,
RealApplication.class }))
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的SubmissionItemManagerTest课程中使用该TestApplication课程:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApplication.class)
public class SubmissionItemManagerTest {
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5277 次 |
| 最近记录: |