Frage

Ich habe eine statische Methode in meinem Code, den ich verspotten irgendwie möchte.

Ich bin mit JMock.

Ein Weg, ich nehme an, ich dies tun könnte, ist „Wrapper-Klasse“ haben, um die statischen Methode und verspotten diese aber ich war für eine bessere Lösung zu hoffen.

Ich werde darüber in die falsche Richtung?

FEEDBACK:

Ich wollte eine Schnittstelle und Klasse haben, die eine Methode hatte, die nur die statische Methode aufgerufen. Es würde mir erlauben, die Logik zu verspotten, indem nur den Aufruf dieser Wrapper-Klasse verspotten. (Ich fühle mich schmutzig reden auch darüber :))

War es hilfreich?

Lösung

Wir unterstützen keine statischen Methoden in JMock verspotten, weil es nicht unseren Design-Ansatz paßt. Wir bevorzugen keine statischen Methoden für wichtige Funktionen zu verwenden, die den Zustand des Systems beeinflussen können. Wir neigen dazu, sie zu benutzen Sie einfach den OO-Code zu unterstützen und macht es besser lesbar. Deshalb sehen wir eine statische Methoden als Hinweis spöttisch, dass es ein Problem gibt. Eine Ausnahme ist, wo es in einem Dritt Bibliothek, aber wir würden wahrscheinlich wickeln, dass in etwas mehr objektorientiert sowieso.

Andere Tipps

JMockit ist ein weiteres, das Toolkit Verspottung statischen Methoden (sowie abschließende Methoden ermöglicht, Konstrukteure, usw.).

Ich sehe kein Problem mit dem vernünftig Verwendung von statischen Methoden, wenn eine ansonsten OO-Lösung zu entwerfen.

Zum Beispiel, ein Muster / Idiom ich verwenden möchte, ist die statische Fassade , insbesondere eine einfachere und leichter API an das Persistenz-Subsystem in einer Business-Anwendung zu verwenden. Meiner Meinung nach ist keine andere Lösung ist eleganter als so etwas wie:


    List<Person> peopleAboveAge = 
        find("select p from Person p where p.age >= ?", age);

, wobei das Verfahren find statisch von einer PersistenceFacade Klasse importiert wird, die nur statische Methoden definiert, und kapselt, wie die richtige Sitzung / EntityManager Instanz zu erhalten. Diese Lösung ist Komponententests freundlich und flexibel. Ich benutzen es in einer Business-Anwendung, die mehr als 500 persistente Entitäten hatte, mit Hibernate. Die statische Fassade geholfen, wenn wir aus dem Ruhezustand 2 migriert 3 in Ruhezustand, wenn wir von Oracle Sybase migriert und dann zurück in Oracle, und wenn wir JPA mit Anmerkungen begannen anstelle von „hbm.xml“ Dateien für ORM-Mapping.

PowerMock ist eine Erweiterung, die EasyMock Verspottung statischer Methoden ermöglicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top