【发布时间】:2018-06-15 06:11:14
【问题描述】:
我是 JUnit 和自动化测试的新手,我真的很想自动化我的测试。这是一个 Spring Boot 应用程序。我使用了基于 Java 的注释样式而不是基于 XML 的配置。
我有一个测试类,我想在其中测试一个根据用户输入检索响应的方法。
测试类:
@RunWith(SpringRunner.class)
@SpringBootTest
public class SampleTest(){
@Autowired
private SampleClass sampleClass;
@Test
public void testInput(){
String sampleInput = "hi";
String actualResponse = sampleClass.retrieveResponse(sampleInput);
assertEquals("You typed hi", actualResponse);
}
}
在我的“SampleClass”中,我自动装配了一个这样的 bean。
@Autowired
private OtherSampleClass sampleBean;
在我的“OtherSampleClass”中,我注释了这样一个方法:
@Bean(name = "sampleBean")
public void someMethod(){
....
}
我遇到的问题是,当我尝试在没有 @RunWith 和 @SpringBootTest 注释的情况下运行测试时,当我尝试运行测试时,注释为 @Autowired 的变量为空。当我尝试使用这些注释 RunWith 和 SpringBootTest 运行测试时,我得到一个
BeanCreationException 导致的 IllegalStateException:创建时出错 名称为“sampleBean”的 bean 并且无法加载应用程序上下文 由 BeanInstantiationException 引起。
当我尝试像用户一样使用它时,代码“正常”工作,所以我总是可以用这种方式进行测试,但我认为自动化测试有利于程序的寿命。
我已经使用Spring Boot Testing Docs 来帮助我。
【问题讨论】:
-
请添加您的
SampleClass。 -
带有
@Bean注解的方法应该返回一个对象,即新的Spring Bean。 -
Spring 注入你的自动装配的 bean。如果您不使用 spring runner 运行,则没有任何东西可以注入,因此成员保持默认值(null)。请在使用 spring 运行时显示更多异常。根本原因可能是类路径或未找到属性失败。
标签: java unit-testing spring-boot