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 @Mock
s 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
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie gehen, um
PowerMockRunner
, Sie zu rufenMockitoAnnotations.initMocks()
, um zu initialisieren, die verhöhnt, die erstellt werden, mithilfe der Anmerkungen.Allerdings gibt es mehrere gute Gründe, nicht zu verwenden
InjectMocks
überhaupt. Im Allgemeinen haben Sie weniger Kontrolle darüber, wie Ihr test-set-up. Es ist besser, rufen Sie einfachnew
und übergeben Sie die Argumente in manuell. Auch, wenn es irgendeine Art von problem, Mockito wird nur fehl. Sehen Sie mehr in diesem Artikel: