问题描述
TestSomething.class:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "application-context-junit" })
public class TestSomething {
@Autowired
ISomeService someService;
...// more code
}
SomeServiceImpl.class:
@Service("someService")
public class SomeServiceImpl implements ISomeService{
@Autowired
ISomeAnotherService someAnotherService;
..//more code
}
application-context-junit.xml:
<context:component-scan base-package="com.basepackage.*" />
所以,我的问题是如果我在application-context-junit.xml中提供组件扫描以处理所有Autowires,还是应该在XML中添加以下内容,是否足够?
<context:component-scan base-package="com.basepackage.*" />
<bean id="someService" class=""com.basepackage.someServiceImpl"" />
<bean id="someAnotherService" class=""com.basepackage.someAnotherServiceImpl"" />
解决方法
每次使用场注入时,单元测试都会消失!
请勿使用归档注入,因为这不是一个好习惯。而且,当Spring必须为每个测试注入类时,它将减慢测试速度。
正如您在此Article中所读到的,最好使用构造函数或setter注入。
通过这种类型的注入,可以轻松模拟被测组件使用的所有组件,如下所示:
import org.junit.Before;
import org.mockito.Mockito;
public class MyBeanTest {
private MyBean target = new MyBean();
private AnotherBean anotherBean = Mockito.mock(AnotherBean.class);
@Before
public void setUp() {
myBean.setAnotherBean(anotherBean);
}
//Tests...
}