Spring Boot Unit Test - 缺少运行测试的bean

时间:2017-07-18 15:39:03

标签: java spring rest unit-testing

Spring Boot版本1.5.4.RELEASE。

运行应用程序正常工作正常。

运行单元测试时,缺少某些bean,例如:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in ...service.post.PostService required a bean named 'mongoTemplate' that could not be found.


Action:

Consider defining a bean named 'mongoTemplate' in your configuration.

我正在使用MongoDB存储库。我通过添加一个返回此bean的配置类来解决这个问题。

在此之后我尝试再次执行Unit测试,出现以下错误:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in springfox.documentation.spring.data.rest.BasePathAwareServicesProvider required a bean of type 'org.springframework.data.rest.core.config.RepositoryRestConfiguration' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.data.rest.core.config.RepositoryRestConfiguration' in your configuration.

这是由springfox swagger ui Rest文档引发的。删除此应用程序依赖项时,测试成功完成。

我在这里想念什么?在单元测试“环境”中无法找到或自动配置某些bean。

更新

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTests {

    @Test
    public void contextLoads() {}
}

@RunWith(SpringRunner.class)
@WebMvcTest(value = ProfileController.class, secure = false)
public class ProfileControllerTest {
    private MockMvc mockMvc;
    @MockBean private ProfileService profileService;

    @Before
    public void setUp() {
        this.mockMvc = MockMvcBuilders.standaloneSetup(new ProfileController(profileService)).build();
    }

    @Test
    ....
}

这是我目前唯一的测试控制器。

3 个答案:

答案 0 :(得分:2)

修改代码以显示如何排除运行单元测试时通常需要的配置:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTests {

    @Test
    public void contextLoads() {}
}

@RunWith(SpringRunner.class)
@WebMvcTest(value = ProfileController.class, secure = false, excludeAutoConfiguration = EmbeddedMongoAutoConfiguration.class) // or any other configuration.
public class ProfileControllerTest {
    private MockMvc mockMvc;
    @MockBean private ProfileService profileService;

    @Before
    public void setUp() {
        this.mockMvc = MockMvcBuilders.standaloneSetup(new ProfileController(profileService)).build();
}

@Test
....

}

您可以找到包含集成和单元测试here的完整Spring Boot应用程序。

答案 1 :(得分:1)

@SpringBootTest(classes = Application.class)作为ProfileControllerTest的注释。

答案 2 :(得分:0)

我在 SpringBoot 版本上遇到了类似的问题:2.2.5.RELEASE 我的问题就是这样解决的。

{{1}}