Die Verspottung der Abhängigkeit von einer property-Datei
Ich bin versucht, zu schreiben unit Tests, die beinhaltet die Verwendung von legacy-code. Problem ist, was ich sagen kann, ist, den legacy-code verwendet ein Schlüssel/Wert-paar aus einer property-Datei zu initialisieren eines seiner final static private Mitglieder, und ich habe nicht die leiseste, wo dieser Eigenschaft-Datei (die gesamte Anwendung ist Recht groß).
So, in meinem test habe ich wollen, so etwas zu tun (mit Mockito):
LegacyClass legacyClass = mock(LegacyClass.class);
Ich am Ende immer ein ExceptionInInitializationError
gibt nicht finden können, die eine bestimmte Eigenschaft key.
In LegacyClass.java gibt es:
private static final int LEGACY_PROPERTY =
Integer.parseInt(LegacyPropertyManager.getProp("legacy.property.key"));
Gibt es eine Möglichkeit, einen test schreiben, nutzt diese legacy-Klasse, auch wenn die Eigenschaft key-es sucht nicht vorhanden ist? Kann es sein, verspottet irgendwie?
Aber das problem ist, dass es die legacy-Klasse verwendet, die die Eigenschaft - wie würde LegacyClass meine eigene properties-Datei bei der Instanziierung statt ein schaute durch LegacyPropertyManager?
Wirklich schlau; aber ich bin mir nicht sicher, wie Sie Sie verwenden
mockStatic
zu verspotten getProp
so, dass er mein Eigentum Datei. In meinem Gerät zu testen, habe ich versucht, Spott LegacyPropertyManager
und dann die Einrichtung eines when(...).thenReturn(...)
wie in dem Beispiel, das Sie verlinkt sind, aber es sieht aus wie LegacyClass verwendet immer noch das original. War es ein extra Schritt, den ich tun müssen?Förderung, um eine Antwort zu geben, die es seinen eigenen thread.
InformationsquelleAutor dashik | 2013-08-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Möglicherweise nicht sehr weit kommen, ohne eine clevere Bibliothek, wie PowerMock. Beachten Sie, dass Ihre LegacyClass.java initialisiert diese Eigenschaft in einem static final-Feld, was bedeutet, dass die Initialisierung wird ausgeführt, sobald es geladen ist. PowerMock verwendet tiefer Magie (lies: bytecode-manipulation), um Ihnen zu erlauben mock statische
getProp
Methode Sie oben zitiert.Müssen Sie Folgendes tun, um die ersten Schritte mit PowerMockito:
Hinweis: die Klasse-level-Annotationen, die jeweils erlauben, für PowerMock Initialisierung und Registrierung die richtige Klasse für statische Ebene spöttisch.
getProp
. Immer Fehler. In eclipse recomndation ist es zu Fragen, zu tungetProperties.
Aber Testfälle fehlschlagen.Es klingt wie Sie vielleicht ein etwas anderes problem. Die Kommentare sind nicht ein guter Ort, um es zu lösen, wie Sie die Kommentar-box ist klein und Formatierung-beschränkt; bitte prüfen, ob eine neue top-level-Frage. Zu zeigen, die Forschung/versuche, Sie können den link zu dieser Antwort und beschreiben Sie, welche Teile über die es nicht anwendbar sind für Sie.
ich Stell hier eine Frage. Bitte haben Sie einen Blick. stackoverflow.com/questions/51297854/...
InformationsquelleAutor Jeff Bowman
Beispiel der Spott eine properties-Datei, die völlig ignorieren, wo es ist, wäre die folgende. Sie können erstellen Sie Ihre eigenen Satz von Schlüssel/Wert-Paare direkt in die verspottet Eigenschaften Objekt.
Immer dieses Objekt benutzt werden, indem Sie Ihre legacy-Klasse beinhalten kann code-änderungen an der legacy-Klasse wie das ändern der privaten Immobilien-Objekt geschützt oder erstellen eine set-Methode.
Wenn nicht zu verbessern, legacy-code, ich weiß, Sie Wagen sich in den Bereich der partial-mocks/spies (Mockito 1.8) wie im folgenden beschrieben-Beitrag .. Mockito statischen bypass-Methode für die Prüfung und dessen Verbindung zu Effektive Mockito. Ich habe Sie nicht genutzt, so kann ich nicht mehr bieten Hilfe. Viel Glück.
Wenn Sie sind nicht erlaubt zu berühren, der class-code, dann was werden Sie tun, wenn Ihr Test zeigt einen Fehler im code?
Ah, nur, um die Sache aufzuklären, ich bin nicht die Prüfung der legacy-code. Es ist im Einsatz seit Ende der 90er Jahre (wenn auch schlecht geschriebene nach heutigen Maßstäben), so wissen wir, es ist funktional. Ich brauchte nur eine Klasse schreiben (und unit-test) verwendet, dass legacy-code, aber sein schlechtes design gab mir eine harte Zeit lustig. Ich habe in einer Anfrage mit meinem Chef über die Erlangung der Genehmigung für die Umgestaltung, und er sagte, er würde versuchen, etwas dagegen zu tun.
InformationsquelleAutor Steven Mai