这可能是非常基本的,但我是Spring Boot的新手(以及Spring的许多方面),而the documentation并没有直接回答这个问题。
使用最新的Spring Boot(1.2.1),我有一些集成测试,其中Spring被加载并且依赖性很好地自动装配(设置它很简单)。
测试的基类:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public abstract class IntegrationTest {
}
主Application
课程不仅仅包含SpringApplication.run()
主要方法和这些注释:
@ComponentScan
@EnableAutoConfiguration
@EnableScheduling
示例测试:
public class UserServiceTest extends IntegrationTest {
@Autowired
UserService userService;
@Test
public void testSomething() throws Exception {
// Use UserService; make assertions
}
}
对于必要的依赖性,我只有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>
我创建了一个自定义的ErrorController along these lines,我在其中定义了一个@Autowired ErrorAttributes
字段。请参阅the CustomErrorController source code。
在此之后,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)}
什么是最简单的,最简洁的方法是在测试中注入ErrorAttributes bean?
我应该创建单独的Application
用于测试,使用某种模拟的ErrorAttributes
bean,还是可能有更简单的方法?我是否缺少与网络/控制器测试相关的帮助或依赖?
答案 0 :(得分:6)
使用@WebIntegrationTest
这里提到:
答案 1 :(得分:5)
您可以使用@WebAppConfiguration
注释测试类,以指示Spring的测试框架创建Web应用程序上下文(足以自动装配ErrorAttributes
),而无需实际启动嵌入式容器。
答案 2 :(得分:2)
以下代码正在为我提供带注释的Spring启动
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes =Application.class)
@WebIntegrationTest(randomPort=true)
@ContextConfiguration(classes = Application.class)
public class MyRepositoryIntegrationTests {
@Autowired
private IMyRepository myRepository;
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()"+my.findAll());
//assertEquals(message,message);
}
}