Frage

Mein Programm hat eine tägliche Routine, ähnlich wie bei einem Wecker Ereignisse. Sprich, wenn es 02.00 Uhr (Die Zeit ist die Systemzeit in meinem PC), tun Sie etwas für mich.

Was ich tun möchte, ist die Testphase zu beschleunigen (Ich will 4 Tage nicht wirklich im Alltag suchen, warten und Fehler überprüfen.) Ich las auf Wiki von Mock-Objekt , DID der Schreiber erwähnt Wecker Programm. Ich war so glücklich zu sehen, aber immer noch, nicht wissen, wie es zu tun.

Ich bin neu in Mock-Objekt, und ich bin Programmierung in Java. So JMock oder EasyMock (oder ähnliche) könnte in Ordnung für mich.

Danke

War es hilfreich?

Lösung

Wenn Sie die aktuelle Zeit bekommen müssen, um die Systemuhr nicht direkt verwenden - verwendet eine Schnittstelle wie zum Beispiel:

public interface Clock
{
    long currentMillis();
}

Sie können dann implementieren diese mit einem Systemtakt für die Produktion und für Tests in einem gefälschten Pass, wo Sie die gefälschten einstellen zu welcher Zeit Sie wollen.

Allerdings werden Sie auch verspotten müssen aus, was Ihr System fährt - werden Sie explizit für eine bestimmte Zeit warten, oder tut etwas anderes Ihren Code aufrufen

Andere Tipps

Ich muss mich entschuldigen, da Sie über Java gefragt haben, und ich bin zum Mittagessen, wenn es um Java geht, aber eine Lösung ist, die Datetime-Objekt zu verspotten und es für die gewünschte Zeit einstellen.

In .NET wäre es so etwas wie folgt aussehen:

public static class SystemTime
{
    public static Func<DateTime> Now = () => DateTime.Now;
}

SystemTime.Now = () => new DateTime(2000,1,1);

Von: Umgang mit der Zeit in Tests


  

... [A] n Wecker-Programm, das bewirkt, dass ein   Glocke zu einem bestimmten Zeitpunkt läuten könnte   Holen Sie sich die aktuelle Zeit von außen   Welt. Um dies zu testen, muss der Test   warten, bis die Alarmzeit wissen   ob es hat die Glocke geläutet   korrekt. Wenn ein Mock-Objekt wird verwendet, in   Ort des realen Objekts, kann es sein,   programmiert, um die Glockenläuten zu schaffen   Zeit (ob es tatsächlich, dass die Zeit   oder nicht), so daß der Wecker   Programm kann in Isolation getestet werden.

Dieser Wecker Sie Referenzierung ist ein Beispiel zu geben, ein Objekt spöttisch. Es ist nicht wirklich ein Objekt, das Sie aus dem Mock-Framework verwenden können.

Im Grunde, was Sie in dem Test zu tun ist die Uhr Ereignisse fälschen. Wie genau hängt etwas von dem Design, und wie Sie für das Ereignis warten, aber es einfach zu halten (wenn nicht rein) mein Ansatz ein Verfahren zu haben wäre, die aufgerufen wird, wenn die Zeit Ereignis ausgelöst wird, und dann beiden Seiten testen davon.

Zuerst ist die Methode zu testen, fordern und zu sehen, dass das terminiertes Ereignis tut, was Sie erwarten. Dann diese Klasse verspotten (mit JMock die bevorzugte Art und Weise sie eine Schnittstelle zu machen und haben Ihr Rufmethode diese Schnittstelle implementieren).

Sie dann die mock der Klasse übergeben, die den Zeitpunkt behandelt. Auch hier würde ich das Einfädeln / auslösenden Probleme abstrahieren (wie die Systemuhr Kontrolle und starten Sie den Faden) und haben spottet Rückgabewerte, die im Wesentlichen das Ereignis laufen sofort.

Dann den echten Code halten, dass die Systemuhr tatsächlich liest und startet den Faden so klein wie möglich, und das wird der Bereich sein, der nicht unter Unit-Test ist.

Mocking bezieht sich auf Unit-Tests. Für die Funktionalität beschreiben Sie, ich würde den Auslöser trennen (in Ihrem Fall der Wecker Ereignis) aus dem Prozess (was auch immer es Ihre tägliche Routine "ist tut) und Unit-Test, den Prozess-Funktionalität.

Dann Ihre Aufmerksamkeit auf die Scheduling-Code richten, die Ihre Prozessfunktionalität aufruft. Ich würde mit so etwas wie Quartz für diese empfehlen, aber wenn Sie auf werden Rollen Ihre -eigener die Unit-Test für sie mit dem eigentlichen Systemtakt arbeiten können, sofern Sie die Auslösezeit zugeordnet werden, basierend auf dem aktuellen Wert des Systemtakts als alle für Sie testen wird, ist, dass das Triggerereignis eintritt.

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