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 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 die
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 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

Schreibe einen Kommentar