Inject Mocks für Objekte, die von Factory-Klassen erstellt wurden

8

Ich habe die folgende Klasse:

%Vor%

Und die Testklasse:

%Vor%

Wie kann ich eine Apple-Instanz als Mock in MyClass einfügen?

    
saravana_pc 19.02.2014, 11:58
quelle

3 Antworten

16

Sie haben 3 Möglichkeiten, dies zu lösen:

Abstrakte Fabrik : Verwenden Sie statt einer statischen Methode eine konkrete Fabrikklasse:

%Vor%

Machen Sie sich in Ihrer Testklasse über die Fabrik lustig:

%Vor%

PowerMock : Verwenden Sie PowerMock, um eine statische Methode zu erstellen. Schauen Sie sich meine Antwort auf eine relevante Frage an , um zu sehen, wie es gemacht wird.

Testbare Klasse : Machen Sie die Apple -Erstellung in eine protected -Methode eingebettet und erstellen Sie eine Testklasse, die sie überschreibt:

%Vor%

Natürlich sollten Sie in Ihrer Testklasse TestableMyClass und nicht MyClass testen.

Ich werde Ihnen meine Meinung zu jeder der Methoden sagen:

  1. Die abstrakte Fabrikmethode ist die beste - Dies ist ein klares Design, das die Implementierungsdetails verbirgt

  2. Die testbare Klasse - Ist die zweite Option, die minimale Änderungen erfordert

  3. Die Option PowerMock ist mein unbeliebter Favorit - Anstatt ein besseres Design zu wählen, ignorierst du und versteckst dein Problem. Aber das ist immer noch eine gültige Option.
Avi 19.02.2014, 12:01
quelle
1

Bezüglich der ersten Antwort von Avi & amp; Ev0oD. Abstrakte Klassen können nur erweitert und nicht implementiert werden.

%Vor%     
ugurkocak1980 30.01.2018 10:40
quelle
0

Zusätzlich zu der von Avi vorgeschlagenen Lösung können Sie eine vierte Möglichkeit wählen:

In die Fabrik injizieren: Dies ist für mich die beste Option, wenn Sie bereits Code zum Refacrot haben. Mit dieser Lösung müssen Sie den Programmiercode nicht ändern, sondern nur die Werksklasse und den Test.

%Vor%

Jetzt können Sie Ihre statische Fabrik einfach benutzen:

%Vor%     
Glauco Cucchiar 17.01.2017 09:33
quelle

Tags und Links