【问题标题】:Unit Test Spring Boot with Controller -> Service -> Repository使用控制器 -> 服务 -> 存储库对 Spring Boot 进行单元测试
【发布时间】:2019-03-20 13:04:51
【问题描述】:

我正在尝试使用控制器、服务和存储库(SPRING DATA)在 Spring Boot 中应用单元测试,但是当我尝试执行测试并为我显示此消息时。

ParameterService 中的字段 parameterRepository 需要一个找不到的 ParameterRepository 类型的 bean。

我将@repository 放在我的接口存储库中,但是不起作用。

我将部分代码附加到您的帮助中。

@RunWith(SpringRunner.class)
@WebMvcTest(value = ParameterController.class, secure = false)
@ContextConfiguration(classes = {ParameterController.class, ParameterService.class, ParameterRepository.class})
public class ParameterTest {

@Autowired
private WebTestClient webClient;

@Test
public void getParamterById() {
    this.webClient.get().uri("/parameters/v1").exchange().expectStatus().isOk();
}

}

public interface ParameterRepository  extends MongoRepository<Parameter, ObjectId>{

Optional<Parameter> findByCode(String code);

}

有人知道如何在 Spring 中通过测试解决这个问题吗?

【问题讨论】:

    标签: java spring spring-boot spring-data-jpa spring-data


    【解决方案1】:

    您的 @ContextConfiguration 没有指向您的 @Configutation 类。您无需将控制器和服务类传递给 ContextConfiguration。

    @ContextConfiguration(classes = {ParameterController.class, ParameterService.class, ParameterRepository.class})
    

    您可以有一个单独的类@TestConfiguration,它将默认扫描并加载当前包和子包中的所有类。

    @TestConfiguration
    public class MyTestConfiguration {
    

    将此测试配置类传递给您的@ContextConfiguration

    @ContextConfiguration(classes={MyTestConfiguration.class})
    

    如果您的测试配置不在包层次结构的顶部 你可以像这样使用@ComponentScan

    @ComponentScan({"com.my.package.first","com.my.package.second"})
    

    【讨论】:

    • 感谢您的帮助
    猜你喜欢
    • 2019-07-07
    • 2018-12-22
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    相关资源
    最近更新 更多