如何在测试中自动连接ErrorAttributes?

Jon*_*nik 5 spring integration-testing spring-test spring-boot

这可能是非常基本的,但我是Spring Boot的新手(以及Spring的许多方面)并且文档没有直接回答这个问题.

设置

使用最新的Spring Boot(1.2.1),我进行了一些集成测试,其中Spring被加载并且依赖性很好地自动装配(设置它非常简单).

测试的基类:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public abstract class IntegrationTest {

}
Run Code Online (Sandbox Code Playgroud)

Application类没有比主要方法SpringApplication.run()和这些注释更多:

@ComponentScan
@EnableAutoConfiguration
@EnableScheduling
Run Code Online (Sandbox Code Playgroud)

示例测试:

public class UserServiceTest extends IntegrationTest {    
    @Autowired
    UserService userService;

    @Test
    public void testSomething() throws Exception {
        // Use UserService; make assertions
    }    
}
Run Code Online (Sandbox Code Playgroud)

为了获得必要的依赖,我只需spring-boot-starter-test:

<!-- Typical Spring Boot test dependencies: Spring Test, JUnit, Hamcrest, Mockito -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

问题

沿着这些行创建了一个自定义的ErrorController ,我定义了一个@Autowired ErrorAttributes字段.请参阅CustomErrorController源代码.

在此之后,Spring集成测试停止了工作:

java.lang.IllegalStateException: Failed to load ApplicationContext
...
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: 
    No qualifying bean of type [org.springframework.boot.autoconfigure.web.ErrorAttributes] found for dependency: 
    expected at least 1 bean which qualifies as autowire candidate for this dependency. 
    Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Run Code Online (Sandbox Code Playgroud)

这个问题

在测试中注入ErrorAttributes bean 的最简单,最干净的方法是什么?

我应该创建单独的Application用于测试,使用某种模拟ErrorAttributesbean,还是可能有更简单的方法?我错过了一些与Web /控制器测试相关的帮助或依赖吗?

ci_*_*ci_ 6

使用注释来标记测试基类或单个测试用例类 @WebIntegrationTest

它在这里提到:

http://docs.spring.io/spring-boot/docs/1.2.1.RELEASE/reference/htmlsingle/#boot-features-testing-spring-boot-applications

  • @Jonik您还可以在测试类上使用`@WebAppConfiguration`来获取Web应用程序上下文(足以自动装配`ErrorAttributes`),而无需实际启动嵌入式容器. (2认同)

And*_*son 6

您可以使用@WebAppConfiguration指示Spring的测试框架来创建Web应用程序上下文(足以进行自动装配ErrorAttributes),而无需实际启动嵌入式容器.