Ich bin ein Newie in Junit-Tests, aber ich muss etwas Code testen. Ich glaube, ich weiß jetzt, die Grundlagen der es, aber ich habe immer noch ein Problem, an dem ich nichts im Internet finden konnte:Wie mockt man einen statischen Methodenaufruf auf ein Objekt in einer statischen Methode?
Hier ist die Klasse I zu testen wollen:
public static void methodToTest(Label l2, Label l3, User u) {
int first = MyDB.someMethod(u.anotherMethod()).size();
int second = MyDB.someOtherMethod(u).size();
if (first == 1) {
l2.setCaption("...");
}
...
}
I don‘ Ich möchte, dass das System die Ganzzahlen "first" und "second" erstellt. Stattdessen möchte ich nur, dass sie "1" sind, damit ich testen kann, ob die letzten Codezeilen richtig funktionieren.
MyDB ist eine öffentliche Klasse mit statischen Methoden (irgendeinemethode() und someOtherMethod())
ich die Methode methodToTest testen möchten. Ich habe versucht, diese Methode mit parms zu bezeichnen und am Ende die modifizierten Params mit den erwarteten zu vergleichen.
Ich benutze Mockito und PowerMockito.
Dies ist einer meiner Versuche:
@PrepareForTest({ClassToTest.class, MyDB.class })
@RunWith(PowerMockRunner.class)
public class Test extends PowerMockTestCase{
PowerMockito.mockStatic(MyDB.class);
PowerMockito.doReturn(1).when(MyDB.someMethod(u.anotherMethod()).size());
PowerMockito.doReturn(1).when(MyDB.someOtherMethod(u).size());
ClassToTest.methodToTest(l1, l2, u);
assertTrue(l1.equals(l3) && l2.equals(l4));
}
Die Ausnahme, die ich erhalte, ist: ‚Argument übergeben, wenn() ist kein Schein!‘
Ich hoffe, dass mir jeder helfen kann. Ich habe so viele Stunden gebraucht, um dieses Problem zu lösen, ohne Erfolg.
Danke !!!
Natürlich könnten Sie die statischen Methoden verspotten, aber wäre es nicht besser, sie loszuwerden und die unbequemen, getunnelten Abhängigkeiten, die sie bringen? Das wäre mein Vorschlag: Vermeiden Sie statische Methoden. Wenn Sie mit dem Code von jemand anderem arbeiten und ihn nicht umgestalten, bis Sie Tests in der Umgebung haben, könnte ein Tool wie JMockit einfacher zu verwenden sein als Mockito und PowerMockito. – unigeek