如何将 @InjectMocks 和 initMocks() 与具有必需 String 参数的对象一起使用?
How to use @InjectMocks and initMocks() with an object that has a required String parameter?
给定一个要测试的组件,在其构造函数注入中需要不可模拟的 class (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
是最终的 class)。那么我如何使用 Mockito 并将 param1
参数的特定字符串值“注入”到 MyService
的构造函数(或者以其他方式测试需要传递非空字符串的 class )?
我认为简单的答案是不使用 @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 );
给定一个要测试的组件,在其构造函数注入中需要不可模拟的 class (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
是最终的 class)。那么我如何使用 Mockito 并将 param1
参数的特定字符串值“注入”到 MyService
的构造函数(或者以其他方式测试需要传递非空字符串的 class )?
我认为简单的答案是不使用 @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 );