什么是等效于以下方法的方法:

@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

09-28 09:44