【问题标题】:How to autowire service which in turn autowires another service in Junit如何自动装配服务,进而在 Junit 中自动装配另一个服务
【发布时间】:2020-09-08 13:04:57
【问题描述】:

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),那么只需创建一个服务实例并自己注入它们。
  • @M.Deinum 感谢您的回复。我创建了单独的配置只是为了理解。我要测试的服务中有很多自动连接。所以我这里需要春天
  • 它应该只适用于组件扫描,前提是您的 ISomeAnotherService 的 impl 也被正确注释,例如与@Component@Service 或类似。一句忠告;避免使用大型测试上下文,因为这些会成为它们自己的维护负担,并且会很快变得复杂。我发现其他项目正在针对存根运行测试,并因此天真地通过了。

标签: java spring junit autowired applicationcontext


【解决方案1】:

每次使用字段注入时,单元测试都会死掉!

不要使用归档注入,因为这不是一个好习惯。此外,当 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...
}

【讨论】:

  • 如果您需要集成测试而不是单元测试,您的方法将不起作用。此外,Spring 将在运行之间缓存上下文,因此只有在配置更改时(在编写集成测试时不应该经常发生),每个测试都不会发生注入。
  • @Sebastian 我有兴趣在没有 Mockito 的情况下这样做
  • @M.Deinum 你是对的,如果你想编写一个集成测试,你需要 Spring 框架来注入所有依赖项。但是我使用构造函数或 setter 注入的方法是正确的,因为通常您正在编写单元测试和集成测试。
猜你喜欢
  • 2015-02-19
  • 2015-03-03
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 2020-04-29
相关资源
最近更新 更多