我的项目使用spring-boot 2.1.6。
我尝试测试以下代码:
@Component
public class MyComponent {
@Autowired
private MyClient client;
@Value("${api.bah.url}")
private String url;
public SaidaPadrao listarCnpj(DtoCnpjRequest dtoRequest) {
log.debug("Sending request to url=" + url);
return client.listarCnpjConvivencia(dtoRequest);
}
}
字符串
(请注意,我稍微简化了代码。)
在我的测试中,我试着这样做:
@RunWith(MockitoJUnitRunner.class )
public class AleloConvivenciaComponentTest {
@Autowired
@Spy
private MyComponent comp;
@Test
public void testHML() {
var dtoRequest = // ...
SaidaPadrao listarCnpjs = comp.listarCnpj(dtoRequest);
// ...
}
型
我的问题是:
当使用@Autowired
(没有@Spy
)加载MyComponent comp
时,我在单元测试中得到了comp上的NullPointer。当使用@Autowired
和@Spy
时,我设法在comp.listarCnpj
上运行测试。
但是,在comp.listarCnpj
方法中,测试失败,NullPointer位于client.listarCnpjConvivencia我错过了什么?我想完整地运行这个方法,在这种情况下没有模拟。 附加问题:
${api.bah.url}在默认的
application.yml文件中,但由于某种原因,它似乎无法加载。值始终为null。我简化了代码,但此配置用于
client.listarCnpjConvivencia`中。此配置文件不应在测试中默认加载?
1条答案
按热度按时间yi0zb3m41#
单元测试运行在一个单独的上下文中,而不是您正常运行的Sping Boot 应用程序,它都由JUnit框架运行和管理。
你可以了解更多关于JUnit here的信息,它描述了框架是如何工作的。
通过你提供的代码看起来你想得到Spring Framework示例化的对象,但你只使用了MockitoJUnitRunner,它只提供mocking功能,你应该使用SpringRunner来处理这个任务,取决于你的需要,你是否需要整个spring上下文,你可以使用@SpringBootTest annotation来实现这个目的。
我建议你检查这个link,因为它描述了关于如何实现这一点的详细信息和示例。