什么是以下等效方法:
@Mock
MyType1 myType1;
@Autowired
@InjectMocks
MyType2 myType2;
我可以替换 @Mock
同 mock(MyType1.class)
。
但我怎么能取代 @InjectMocks
用方法调用?像这样的东西:
injectMocks(MyType2.class)
什么是以下等效方法:
@Mock
MyType1 myType1;
@Autowired
@InjectMocks
MyType2 myType2;
我可以替换 @Mock
同 mock(MyType1.class)
。
但我怎么能取代 @InjectMocks
用方法调用?像这样的东西:
injectMocks(MyType2.class)
为何使用 Autowired
你的junit考试?因为你正在嘲笑依赖关系 MyType2
在编写测试时,你必须知道它的concreate实现。
然后你不需要也不应该使用Spring或任何注入框架来创建实例 MyType2
你想测试。在测试初始化中直接创建它!我知道在使用IoC框架几年后,编写起来很困难 myType2 = new MyType2Impl(mock(myType1.class))
但它确实会使您的测试变得更简单,更快(因为没有构建应用程序上下文)。
例如。:
@Before
public void setup() {
myType1 = mock(MyType1.class);
myType2 = new MyType2Impl(myType1);
}
但如果您真的想在junit测试中使用IoC,请使用 springockito 由Brice建议,并建立你的模拟 MyType1
在您的应用程序上下文
为何使用 Autowired
你的junit考试?因为你正在嘲笑依赖关系 MyType2
在编写测试时,你必须知道它的concreate实现。
然后你不需要也不应该使用Spring或任何注入框架来创建实例 MyType2
你想测试。在测试初始化中直接创建它!我知道在使用IoC框架几年后,编写起来很困难 myType2 = new MyType2Impl(mock(myType1.class))
但它确实会使您的测试变得更简单,更快(因为没有构建应用程序上下文)。
例如。:
@Before
public void setup() {
myType1 = mock(MyType1.class);
myType2 = new MyType2Impl(myType1);
}
但如果您真的想在junit测试中使用IoC,请使用 springockito 由Brice建议,并建立你的模拟 MyType1
在您的应用程序上下文
Mockito中没有用于模拟注入的公共API。此外,由于此注释主要是在测试中布置事物的方式上进行的,因此它与测试的初始化阶段相关。
虽然它可能会在未来某个时候发生变化。
但是,Mockito注释字段可以通过以下方式初始化 MockitoJUnitRunner
或者 MockitoAnnotations.initMocks()
。它们都创建模拟实例并执行注入。
我也在你的代码中看到你正在使用 @Autowired
- 因此弹簧的东西,可能是通过XML配置的。 @InjectMocks
并没有真正开发用于其他依赖注入框架,因为开发是由单元测试用例驱动的,而不是集成测试。
你可能想看看 springockito,这是另一个试图缓解Spring中Mockito模拟创建的项目。
希望有所帮助