给定一个要测试的组件,在其构造函数注入中需要一个不可模拟的类(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和"注入" param1
构造函数的MyService
参数的特定String值(或者测试此类需要传递非null String的类)?
答案 0 :(得分:13)
我认为简单的答案不是使用@InjectMocks
,而是直接初始化您的对象。我能看到的唯一缺点就是你没有测试注射,但随后用@InjectMocks
,我认为你会用Mockito的注射实现测试它,而不是你真正的框架实现,所以没有真正的区别
我会这样做:
public class MyServiceTests {
@Mock
private SomeObject someObject;
private MyService service;
@Before
public void setUp() {
service = new MyService("foo", someObject);
}
}
答案 1 :(得分:1)
尝试
@InjectMocks
private MyService service = new MyService(param1,param2);