wie Einheit Test für Faulheit

8

Ich habe eine Funktion, die eine faule Seq und eine unrealisierte faul Seq zurückgeben soll. Jetzt möchte ich einen Komponententest schreiben (in test-is btw), um sicherzustellen, dass das Ergebnis eine unrealisierte Lazy-Sequenz ist.

    
Arthur Ulfeldt 30.10.2009, 19:48
quelle

2 Antworten

9
%Vor%

Wenn Sie eine Menge Dinge zu testen haben, könnte das vielleicht vereinfachen:

%Vor%

Ab Clojure 1.3 gibt es auch die Funktion realized? : "Gibt true zurück, wenn ein Wert für eine Versprechens-, Delay-, Future- oder Lazy-Sequenz erzeugt wurde."

    
Timothy Pratley 01.11.2009 05:55
quelle
6

Verwenden Sie eine Funktion mit einem Nebeneffekt (z. B. Schreiben in einen Verweis) als Sequenzgeneratorfunktion in Ihrem Testfall. Wenn die Nebenwirkung niemals auftritt, bedeutet dies, dass die Sequenz nicht realisiert wird ... sobald die Sequenz realisiert ist, wird die Funktion aufgerufen.

Richte es zuerst so ein:

%Vor%

Führen Sie dann Ihre Funktion aus. Ich werde einfach die Karte verwenden, hier:

%Vor%

Testen Sie, ob test-fn jemals ausgeführt wurde:

%Vor%

Da wir wissen, dass Karte faul ist, sollte sie immer an diesem Punkt funktionieren. Jetzt, erzwinge Auswertung der Sequenz:

%Vor%

Und überprüfe den Wert von effect-count erneut. Diesmal erwarten wir, dass der Nebeneffekt ausgelöst wurde. Und es ist so ...

%Vor%     
levand 31.10.2009 16:57
quelle