Wie mock-Instanz-Variablen der Klasse?
Wie kann ich verspotte die Variablen instanziiert auf Klasse Niveau..ich will mock GenUser,UserData. wie mache ich es...
Habe ich folgende Klasse
public class Source {
private GenUser v1 = new GenUser();
private UserData v2 = new UserData();
private DataAccess v3 = new DataAccess();
public String createUser(User u) {
return v1.persistUser(u).toString();
}
}
wie ich verspottet meine v1 ist wie das
GenUser gu=Mockito.mock(GenUser.class);
PowerMockito.whenNew(GenUser.class).withNoArguments().thenReturn(gu);
was ich geschrieben habe für unit-Tests und mock ist, dass
@Test
public void testCreateUser() {
Source scr = new Source();
//here i have mocked persistUser method
PowerMockito.when(v1.persistUser(Matchers.any(User.class))).thenReturn("value");
final String s = scr.createUser(new User());
Assert.assertEquals("value", s);
}
selbst wenn ich verspottet persistUser Methode der GenUser v1 es dann auch nicht geben Sie mir "Wert" als meine return val.
vielen Dank im adavanced.......:D
Wie ist
habe ich geändert obj-bitte überprüfen Sie....
OK, ich weiß nicht, PowerMockito (ich don ' T haben, es zu benutzen ;)), aber nicht, es müssen
Sie müssen möglicherweise zusätzliche Vorbereitung zum ersetzen der Konstruktor, wie fge erwähnt, aber eine bessere Idee ist wahrscheinlich zu erstellen Sie eine
Ja, und ich denke, dass es ist, weil Sie nicht getan haben, alle Schritte, die Sie tun müssen, ersetzen Sie den Konstruktor (wie fge sagte), so dass Ihre
obj
erstellt?habe ich geändert obj-bitte überprüfen Sie....
OK, ich weiß nicht, PowerMockito (ich don ' T haben, es zu benutzen ;)), aber nicht, es müssen
@PrepareForMock
oder so? Dein code-Auszug nicht zeigen, dass dieSie müssen möglicherweise zusätzliche Vorbereitung zum ersetzen der Konstruktor, wie fge erwähnt, aber eine bessere Idee ist wahrscheinlich zu erstellen Sie eine
replaceForTest(v1, v2, v3)
Methode in Ihrer Klasse (oder verringern Sie die Felder aus privat -, package-private) und machen es sehr einfach, ersetzen Sie diese Objekte. Kapselung der meisten Dinge ist eine gute Idee-es hilft Fokus und reduzieren Sie die API, die Sie unterstützen müssen-aber durch die Zeit, die Sie führen PowerMockito kann es eine bessere Idee, um gezielt entspannen einige Sichtbarkeit Einschränkungen zur Verbesserung der Testbarkeit.Ja, und ich denke, dass es ist, weil Sie nicht getan haben, alle Schritte, die Sie tun müssen, ersetzen Sie den Konstruktor (wie fge sagte), so dass Ihre
scr.v1
ist eine echte GenUser Objekt, nicht ein PowerMockito mock. Sie wechselte auch gu
mit v1
im Beispiel; wenn das nicht ein StackOverflow Unfall, stellen Sie sicher, dass Sie Ihre Erwartungen über genau das gleiche Objekt, das Sie versuchen zu installieren, in Ihre Source
im test.InformationsquelleAutor swan | 2013-06-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als in der fge Kommentar:
Stellen Sie sicher, dass Sie, dass test-Läufer, und, dass Sie
@PrepareForTest(GenUser.class)
auf Ihrem test-Klasse.(Quelle: https://code.google.com/p/powermock/wiki/MockitoUsage13)
InformationsquelleAutor Jeff Bowman
Haben Sie einen Blick auf https://code.google.com/p/mockito/wiki/MockingObjectCreation - es gibt ein paar Ideen, die Ihnen helfen können.
InformationsquelleAutor Dawood ibn Kareem
Ich weiß nicht, mockito, aber wenn es Ihnen nichts ausmacht mit PowerMock und EasyMock, die folgenden funktionieren würde.
InformationsquelleAutor HardcoreBro