2010-07-14 6 views
5

Ich habe eine Methode, die localtime aufruft, für die ich einen Komponententest schrieb. Ich sende den Anruf an localtime in meinem Test, damit ich die erwarteten Antworten kenne. So weit, ist es gut. Ich führe zufällig den Komponententest auf einer Maschine in einer anderen Zeitzone durch, und vorhersagbar scheitern die Tests, weil sie einige Stunden frei sind. Ich nehme an, dass ich die korrekten Erwartungswerte dynamisch bestimmen könnte, aber das scheint gegen die Idee zu gehen, die Antwort zu kennen, bevor ich die Frage stelle.Wie Unit Testfunktionen aufrufen localtime() in Perl?

Irgendwelche Gedanken darüber, wie man das angeht? Überschreiben localtime? Das scheint extrem.

Danke!

Antwort

6

Ich glaube nicht, dass es ein Problem mit der Berechnung der Werte von Antworten in einem Komponententest gibt. Komponententests sollten einfach genug sein, um komplexitätsbezogene Fehler zu vermeiden, aber eine einfache Zeitzonenberechnung überschreitet wahrscheinlich nicht die Grenze.

In diesem speziellen Fall könnten Sie jedoch die Zeitzone als Teil des Tests auf einen festen Wert (oder mehrere) einstellen. Sehen Sie sich diese Stack Overflow Post über setting time zone in Perl an.

+0

tzset war genial - danke für den Zeiger! –

5

Ich bin nicht sicher genau das, was Ihre Anforderungen sind, aber Sie könnten in der Lage sein, etwas mit Test::MockTime oder Time::Mock getan, von denen beide localtime und Freunde mit verspottet Versionen ersetzt, die jedoch verhalten Sie wollen, dass sie.

+0

Wenn tzset nicht so einfach zu bedienen war, scheint Test :: MockTime perfekt zu sein - danke! –

Verwandte Themen