2 Stimmen

Wie kann man eine einzelne Methode in Java für Unit-Tests stubben?

Ich habe eine Methode in einer Klasse, die in eine Zeichenkette schreibt, die eine andere Methode aufruft, die dasselbe tut. Etwas wie:

void foo() {
  a += "xyx";
  bar();
}

void bar() {
  a += "abc";
}

Für Unit-Testzwecke möchte ich foo und bar getrennt testen. Gibt es eine Möglichkeit zu verhindern, dass bar ausgeführt wird, wenn ich foo() aufrufe, oder es durch eine andere Methode zu ersetzen?

8voto

Egwor Punkte 1294

Erstellen Sie eine Unterklasse, die bar() außer Kraft setzt und nichts tut.

1voto

Adrian Mouat Punkte 41468

Warum sollten Sie das tun wollen?

Sie könnten den Code auf der Bytecode-Ebene mit Hilfe von Aspekten abfangen (was nicht ratsam ist); Sie könnten ein Objekt aufnehmen, das bar aufruft: void foo(MyBarObject m) { a += "xyx"; m.bar(); }

Aber wie gesagt, ich weiß nicht, wozu das gut sein soll. Ein Unit-Test ist dazu gedacht, eine öffentliche Schnittstelle zu testen. Wenn bar() privat oder geschützt ist, dann wird es automatisch über Ihren Aufruf und spätere Assertions zu foo() getestet. Wenn sowohl foo() als auch bar() öffentlich sind, können Sie sie separat testen.

Können Sie ein konkretes Beispiel nennen? Können Sie den zu testenden Code ändern? Etc.

1voto

dcoke23 Punkte 41

Man könnte argumentieren, dass das obige Beispiel kein testbarer Code ist. Stattdessen, wenn der Code wäre:

void foo() {
  a += "xyx";
}

void bar() {
  a += "abc";
}

void fooBar() {
  foo();
  bar();
}

wäre es einfach, Unit-Tests durchzuführen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X