Spring Boot 单元测试找不到注入的依赖项

2w3rbyxf  于 7个月前  发布在  Spring
关注(0)|答案(1)|浏览(114)

我的项目使用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`中。此配置文件不应在测试中默认加载?

yi0zb3m4

yi0zb3m41#

单元测试运行在一个单独的上下文中,而不是您正常运行的Sping Boot 应用程序,它都由JUnit框架运行和管理。
你可以了解更多关于JUnit here的信息,它描述了框架是如何工作的。
通过你提供的代码看起来你想得到Spring Framework示例化的对象,但你只使用了MockitoJUnitRunner,它只提供mocking功能,你应该使用SpringRunner来处理这个任务,取决于你的需要,你是否需要整个spring上下文,你可以使用@SpringBootTest annotation来实现这个目的。
我建议你检查这个link,因为它描述了关于如何实现这一点的详细信息和示例。

相关问题