Gibt es in Grails eine gute Möglichkeit, die aktuelle Zeit mit Joda-Zeit zu verspotten?

8

Ich schreibe einen Code, der Datums- und Uhrzeitberechnungen mit der aktuellen Zeit vergleicht. In der Joda-Zeit wird dies durch einen (Java) -Konstruktor erreicht, da es ein unveränderliches Objekt ist. Ich muss in der Lage sein, so zu spotten, dass new DateTime() einen bestimmten konstanten Zeitpunkt zurückgibt, so dass ich sinnvolle Testaussagen machen kann, aber alle anderen DateTime-Methoden in Ruhe lassen kann.

Das ist widerlich. Grails mockFor(DateTime, true) lässt mich nicht einen Java-Konstruktor verspotten, aber es gibt keine offensichtliche oder lesbare nicht-konstruktive Möglichkeit, die Zeit in Joda-Zeit zu bekommen.

Die einzigen verfügbaren Optionen scheinen Low-Level-JVM-Techniken wie JMockit oder EasyMock 3-Klasse-Spott zu beinhalten, die Grails schmerzen. Gibt es einen einfachen / direkten Weg dies zu erreichen?

    
Stuart Watt 25.05.2011, 20:56
quelle

3 Antworten

5

Am Ende haben wir dateService mit now() method erstellt. In Unit Tests verspotten wir es mit

%Vor%

Dabei ist currentTime ein Einheitstestklassenfeld. Dies macht die Abhängigkeit von dateService (unsere einzige fast globale Abhängigkeit) und für src -Klassen von Hand erforderlich.

Komponententests, OTOH, schauen ziemlich klar damit.

    
Victor Sergienko 26.05.2011, 08:32
quelle
18

Ich weiß, dass dies bereits akzeptiert wurde, aber mit Joda-time kannst du es einfrieren und einstellen, was immer du willst. So können Sie Zeit einfrieren, Zeit vorverlegen, zeitlich rückwärts gehen. Vorausgesetzt, Sie verwenden Joda konsistent, erhalten Ihre Objekte "jetzt" so wie Sie es eingestellt haben.

%Vor%     
alpian 26.05.2011 13:51
quelle
2

Sie könnten einfach gute altmodische OO-Prinzipien verwenden, z. B.

%Vor%

Ihr Code sollte einen Verweis auf eine Implementierung von TimeService über die Abhängigkeitsinjektion erhalten. In resources.groovy verwende MockTimeService nur beim Ausführen der Tests

%Vor%     
Dónal 26.05.2011 08:31
quelle

Tags und Links