webmvctest中的java加载依赖

70gysomp  于 2021-07-05  发布在  Java
关注(0)|答案(2)|浏览(246)

我有一个rest控制器,我正在尝试对其进行单元测试:
它有一些自动连接的依赖项

@RestController
@RequestMapping("/test")
public class TestController {

    private final Dep1 dep1;
    private final Dep2 dep2;
    private final Dep3 dep3;

    public TestController(final Dep1 dep1,
                          final Dep2 dep2,
                          final Dep3 dep3) {
        this.dep1 = dep1;
        this.dep2 = dep2;
        this.dep3 = dep3;
    }

}

我最近补充道 dep3 ```
@Service
public class Dep3 {

private final IValidator validator;

public Dep3(final IValidator validator) {
    this.validator= validator;
}

public void validate(final Request req) {
    validator.validate(req);
}

}
``` Dep3 有自己的自动连线依赖关系 IValidator 这是我的测试课:

@WebMvcTest(TestController.class)
public class TestControllerTest {

    @MockBean
    private Dep1 dep1;

    @MockBean
    private Dep2 dep2;

    @MockBean
    private Dep3 dep3;

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void someTest() throws Exception {

    }

    @TestConfiguration
    static class InnerConfiguration {

        @Bean
        IValidator validator() {
            return new SomeValidator();
        }
    }

}

对于我的测试,我需要代码来实际运行 dep3.validate(..) 随着实施 SomeValidator() . 我不确定如何做到这一点。也许我遗漏了一个注解?

amrnrhlw

amrnrhlw1#

别嘲笑我 Dep3 . 而是配置 Dep3 豆荚 @TestConfiguration :

@TestConfiguration
static class InnerConfiguration {

        @Bean
        Dep3 dep3() {
            return new Dep3(validator());
        }

        @Bean
        IValidator validator() {
            return new SomeValidator();
        }
    }

Spring将完全配置 Dep3 进入 TestController

3j86kqsm

3j86kqsm2#

您必须正确配置mock。像这样:

Mockito.when(dep3.validate(Mockito.any(Request.class))).thenReturn(new SomeValidator());

在实际调用之前,可以在测试方法或设置方法中执行此操作。

相关问题