我有一个类:
public class Sender {
private final SomeClass firstField;
private final SomeClass secondField;
private Sender(SomeClass firtsField, SomeClass secondField){
this.firstField = firstField;
this.secondField = secondField;
}
}
@RunWith(MockitoJUnitRunner.class)
public class SenderTest{
@Mock
private firstField;
@Mock
private secondField;
}
所有东西看起来都是等级的,但看起来它在两个场中注入了相同的对象或类似的东西。当我尝试使用 when(..) 时。thenReturn() 对于一个字段,它设置数据两个另一个和虎钳诗句;最奇怪的是它在调试模式下工作正常。你能说什么?
Mockito在注入两个或多个相同类型的字段时存在一些问题。但是,如果您使用二传手注射,它可以完美地工作。
所以你可以像这样重构"发送者"类:
public class Sender {
private SomeClass firstField;
private SomeClass secondField;
public void setFirstField(SomeClass firstField) {
this.firstField = firstField;
}
public void setSecondField(SomeClass secondField) {
this.secondField= secondField;
}
}
请记住,如果类同时具有构造函数和setter,则Mockito将选择用于注入的构造函数,并完全忽略setter。
编辑:如果您出于某种原因确实需要使用构造函数,您可以随时手动模拟字段,而不是使用 Mockito 注释。因此,在您的情况下,Sender 将保持不变,而 SenderTest 将是这样的:
public class SenderTest {
private SomeClass firstField;
private SomeClass secondField;
private Sender sender;
@Before
public void setUp() {
firstField = Mockito.mock(SomeClass.class);
secondField = Mockito.mock(SomeClass.class);
sender = new Sender(firstField, secondField);
}
@Test
public void smokeTest() {
}
}
这取决于SomeClass
本身是什么。它是一个数据(POJO)对象,值得在测试中创建它们(即填充随机生成的值)。
如果是服务。它可以是体系结构问题的标志。为什么需要同一服务的两个副本?做一些重构可能是有意义的。