给定一个要测试的组件,该组件在构造函数注入中需要一个不可模拟的类(String
),如下所示:
public class MyService {
@Inject
public MyService(String param1, SomeObject param2) {
...
}
}
我想用Mockito用这样的测试工具来测试它:
public class MyServiceTests {
@Mock
private SomeObject someObject;
@InjectMocks
private MyService service;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
}
问题是,我不能@Spy
或@Mock
字符串(因为String
是最后一个类)。那么我该如何使用Mockito和";注入";MyService
的构造函数的param1
参数的特定String值(或者测试这个需要传递非null String的类)?
我认为简单的答案不是使用@InjectMocks
,而是直接初始化对象。我能看到的唯一缺点是,您没有测试注入,但使用@InjectMocks
,我认为您应该使用Mockito的注入实现来测试它,而不是实际框架的实现,所以没有真正的区别。
我会做:
public class MyServiceTests {
@Mock
private SomeObject someObject;
private MyService service;
@Before
public void setUp() {
service = new MyService("foo", someObject);
}
}
你可以试试这个:
@InjectMocks
private MyService service= new MyService( param1 , param2 );