我找到了以下代码。
public class Foo {
@Autowired
private MyService myService = new MyService();
}
这是否意味着Spring会覆盖创建Foo时创建的myService实例?
此代码可以在Junit-context中使用Foo,而无需在springcontext中启动。
可以这样做吗?
答案 0 :(得分:0)
不,做这样的事情也不行。代替:
@Service
public class Foo {
private MyService myService;
@Autowired
public Foo(MyService myService){
this.myService = myService;
}
}´
这样Spring在构造服务时会注入您所需的依赖项。对于JUnit上下文,您只需自己提供它,它可以作为一个真实实例或一个模拟:
@Test
public void testFoo(){
MyService mockService = mock(MyService.class);
Foo foo = new Foo(mockService);
foo.myMethod();
verify(/*Check that foo has done whatever you want with MyService*/);
}
答案 1 :(得分:0)
添加到上面的答案,如果您使用Spring 4,也可以使用ContextConfig运行它,如下所示
使用SpringBoot,您可以使用@Bean注释创建bean,然后自动装配
class MyTestConfig{
@Bean
public MyService myService(){
return new MyService();
};
}
使用MyTestConfig作为contextConfiguration运行测试用例并自动装配为
@Autowired
public MyService myService