Warum kann ich nicht mit @InjectMocks Feld-matching bei der Ausführung mit PowerMockRunner?

Ich habe ein Problem in dem Bereich injection passend für Mockito ist @Mock Anmerkung für @InjectMocks funktioniert nicht in dem Fall, wo es 2 @Mocks des gleichen Typs. Ich habe die @Mock (name = "name_of_var") syntax auch, aber es noch nicht...

Hier ist die Klasse unter test:

    import java.util.Date;
    public class Parent{

    private Date dateA;
    private Date dateB;

    public void setDateA(Date _dateA){
       dateA = _dateA;
    }

    public void setDateB(Date _dateB){
       dateB = _dateB;
    }

    public Date getDateA(){
       return dateA;
    }

    public Date getDateB(){
       return dateB;
    }

Hier ist der test selbst:

    @RunWith(PowerMockRunner.class)
    @PrepareForTest({System.class, Parent.class})
    public class testParent{

    @Mock (name = "dateB")  private Date someOtherDate;
    @Mock (name = "dateA")  private Date someDate;    

    @InjectMocks Parent p;

    @Before
    public void setup(){
        Mockito.when(someOtherDate.getTime()).thenReturn(500l);
        PowerMockito.mockStatic(System.class);
        PowerMockito.when(System.currentTimeMillis()).thenReturn(2000l);
    }

    @Test
    public void testGetDateAGetTimeShouldReturn1000() {
        Mockito.when(someDate.getTime()).thenReturn(1000l);
        Date result = p.getDateA();
        assertEquals(1000l, result.getTime());
    }

    @Test
    public void testGetDateBGetTimeShouldReturn500() {
        Date result = p.getDateB();
        assertEquals(500l, result.getTime());   
    }

Wenn getestet, beide assertEquals Ursache NullPointerException aufgrund der Tatsache, dass die @InjectMocks hat nicht funktioniert.

Wenn ich jetzt ersetzt @RunWith(PowerMockRunner.class) mit @RunWith(MockitoJUnitRunner.class) es einwandfrei.

Auch, wenn ich nur den vorgegebenen 1 Date variable ( sagen wir dateA ) in Parent.java und eine passende mock zu injizieren in ParentTest es Spritzen würde nur gut mit PowerMockRunner.class.

Der Grund, warum ich laufen müssen PowerMockRunner.class weil ich muss in der Lage sein, zu verspotten statische Funktionen sowie Konstruktoren.

Läuft bei mir mit Junit4.12, Mockito-all-1.10.19, und PowerMock-mockito-1.6.2-voll.

Erkennt jemand die Ursache, warum es nicht injizieren, richtig mit PowerMockRunner.class? Gibt es eine Möglichkeit, dieses während der Ausführung mit PowerMockRunner.class?

InformationsquelleAutor DSLee | 2015-08-28
Schreibe einen Kommentar