6

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

Mariusz Grodek
  • 629
  • 4
  • 12
  • 26

0 Answers0