我想为此私有方法创建一个JUnit测试:
@Component
public class ReportingProcessor {
@EventListener
private void collectEnvironmentData(ContextRefreshedEvent event) {
}
}
我尝试过:
@ContextConfiguration
@SpringBootTest
public class ReportingTest {
@Autowired
ReportingProcessor reportingProcessor;
@Test
public void reportingTest() throws Exception {
ContextRefreshedEvent contextRefreshedEvent = PowerMockito.mock(ContextRefreshedEvent.class);
Whitebox.invokeMethod(reportingProcessor, "collectEnvironmentData", contextRefreshedEvent);
}
}
运行代码时,我得到:
java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
您知道我可以解决此问题吗?
答案 0 :(得分:1)
如果您没有使用@SpringBootApplication和已知的main()方法进行注释的类,则需要将组件类的目标放在@SpringBootTest注释上。
通常,我在构建库时执行此操作,对于某些特定情况,我需要具有spring上下文来对它们进行单元测试。
只需将其添加到您的代码中即可:
artifactStore
就做到了,测试正在运行。
编辑:不知道您要精确测试什么,只是想展示如何解决所得到的错误。
答案 1 :(得分:0)
您应该将@RunWith
与@SpringBootTest
一起使用:
@RunWith(SpringRunner.class)
@SpringBootTest
public class ReportingTest {
@Autowired
ReportingProcessor reportingProcessor;
@Test
public void reportingTest() throws Exception {
ContextRefreshedEvent contextRefreshedEvent = PowerMockito.mock(ContextRefreshedEvent.class);
Whitebox.invokeMethod(reportingProcessor, "collectEnvironmentData", contextRefreshedEvent);
}
}