2

我正在尝试使用 spring 设置一个 junit,并且我正在尝试使用 spring 的依赖注入来填充测试类。我想知道这是否是我什至应该尝试的事情?我认为我看到的是 spring 正在实例化测试类并执行 DI,但随后 JUnit 正在创建它自己的实例,该实例尚未执行 DI 并且测试失败。我正在使用 JUnit 4.x 和 spring 3.1.1。

4

2 回答 2

7

您可以使用 spring 将依赖项注入到您的测试中,从而使其成为集成测试。像这样注释

@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
@ContextConfiguration(locations = "/applicationContext-TEST.xml")
public class MyTest {}

但是最好只将您的 spring 托管类测试为 pojo,并在适当的情况下使用模拟对象

例如,很多控制器方法都有一个由 Spring 在运行时注入的模型。但是要对它们进行单元测试,我只需传入一个 HashMap 实例。我的服务层类可以传入一个模拟的dao,这很容易,因为我设计了一个接口并使用了setter注入......

于 2012-06-18T15:43:19.763 回答
1

使用 jUnit,每个测试都应该被隔离,在测试覆盖范围之外没有依赖关系。有几个测试框架可以在 Spring 中提供模拟 bean 实例化。

有一篇关于 Stubs 和 Mocks 的优秀 Martin Fowler文章开始。

Mockito 与 PowerMock 结合使用,可以帮助您测试 spring 组件、服务和控制器。

Mockito 介绍:https
://code.google.com/p/mockito/ PowerMock 介绍:http ://code.google.com/p/powermock/

我知道这将花费时间来研究、学习和实施,但这对于使用 Dependency Injected bean 编写 jUnit 测试非常有益。

于 2012-06-18T16:04:09.327 回答