如何自动连接服务,从而又自动连接Junit中的另一个服务

问题描述

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...
}