在我正在处理的Spring Boot应用程序中,我有一个未注释为bean(@Component
)的类,但包含一个自动连接的字段:
public class One{
@Autowired
private Two x;
public getX(){
return x;
}
}
在Spring应用程序的配置xml中,类One
被标记为bean,这使得在运行应用程序时变量x
被初始化。
现在我编写了一个似乎没有使用spring xml配置的测试。所以我试着手动完成:
@RunWith(SpringRunner.class)
public class Test{
@Autowired
One y;
@Test
public void checkOne(){
System.out.println(y.getX()); //null
}
}
如何让Spring注入正确的代码,以便在我的测试中x
不为空?
答案 0 :(得分:3)
告诉测试使用什么配置:
<form action="FileUploadServlet" method="post" target="_blank" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit">
</form>
请参阅here了解文档
答案 1 :(得分:1)
Essex Boy的方法进行了一次&#34;集成测试&#34;因为它启动Spring进行测试。
通常对于单元测试,您想要模拟您的依赖项;那些可以&#34;自动装配&#34;。
@RunWith(MockitoJUnitRunner.class) // necessary for the annotations to work
public class YourTest {
// this is a mock
@Mock
private Two mockedTwo;
@InjectMocks
// this is automatically created and injected with dependencies
private One sut;
@Test
public void test() {
assertNotNull(sut.getX());
sut.doStuff();
verify(mockedTwo).wasCalled();
}
}
答案 2 :(得分:1)
Alernative to @Essex Boy方法: 在测试中使用自定义配置:
@RunWith(SpringRunner.class)
public class TestClass {
@Configuration
@ComponentScan
static class ConfigurationClass {
@Bean
public One makeOne() {
return new One();
}
}
@Autowired
One y;
@Test
public void checkOne(){
System.out.println(y.getX());
}
}