I have 2 almost the same looking classes:
class Foo1 {
private Bar bar1;
private Bar bar2;
public void setBar1(Bar bar1) {
this.bar1 = bar1;
}
public void setBar2(Bar bar2) {
this.bar2 = bar2;
}
}
class Foo2 {
private Bar bar1;
private Bar bar2;
public Foo2(Bar bar1, Bar bar2) {
this.bar1 = bar1;
this.bar2 = bar2;
}
}
So this is setters vs constructor. The problem is that @InjectMocks works properly only with the first class in the test below:
@RunWith(MockitoJUnitRunner.class)
public class Test {
@Mock
private Bar bar1;
@Mock
private Bar bar2;
@InjectMocks
private Foo1 sut;
}
To test second class I have to do it manually because for both Bar arguments same mock is chosen by @InjectMocks (it's random choice)
@RunWith(MockitoJUnitRunner.class)
public class Test {
@Mock
private Bar bar1;
@Mock
private Bar bar2;
private Foo2 sut;
@Before
public void setUp() {
sut = new Foo2(bar1, bar2);
}
}
Maybe I misunderstood something but how to test second class with @InjectMocks propely? Maybe it's a bug or a feature of Mockito?
Tested on:
- mockito-all: 2.0.2-beta
- mockito-core: 2.1.0
UPDATE: Naming mocks @Mock(name = "mock") is not working in this case