什么是等效于以下方法的方法:
@Mock
MyType1 myType1;
@Autowired
@InjectMocks
MyType2 myType2;
我可以将
@Mock
替换为mock(MyType1.class)
。但是,如何用方法调用替换
@InjectMocks
?像这样:injectMocks(MyType2.class)
最佳答案
为什么在junit测试中使用Autowired
?由于您正在模拟MyType2
的依赖关系,因此在编写测试时必须知道其concreate实现。
然后,您不需要,也不应使用Spring或任何注入(inject)框架来创建要测试的MyType2
实例。直接在测试初始化中创建它!我知道经过多年使用IoC框架后,很难编写myType2 = new MyType2Impl(mock(myType1.class))
,但这确实会使您的测试更简单,更快(因为没有构建应用程序上下文)。
例如。:
@Before
public void setup() {
myType1 = mock(MyType1.class);
myType2 = new MyType2Impl(myType1);
}
但是,如果您真的想在junit测试中使用IoC,请使用Brice建议的springockito,并在应用程序上下文中构建模拟
MyType1
。