Hier ist ein Beispiel für ein Ereignisnetzwerk, das ich verwendet habe, um das Verhalten bestimmter monadischer Aktionen zu untersuchen. Ich möchte einen prinzipientreuen Ansatz und nicht diesen Ad-hoc-Weg, meinen Code zu testen. Ich weiß, wie ich meine Funktionen testen kann, aber ich suche nach Best Practices für das Testen von Verhaltensweisen und Ereignissen, angesichts der neuen Designoptionen in reactive-banana 1.0.0
Ich verlasse viel, in der Hoffnung, dass ich nur das aufgenommen habe, was notwendig ist, um mein Problem zu veranschaulichen. Bitte lassen Sie mich wissen, wenn etwas fehlt, das enthalten sein sollte, um das Problem klarer zu machen.
%Vor%Was der Puffer tun soll, sind akkumulierte Spielerbefehle (die dann woanders verarbeitet werden) und dann geleert werden, sobald ein bestimmter Stapel von Spielerbefehlen verarbeitet wurde. Beim nächsten Tick passiert es wieder von vorne.
Ich versuche sicherzustellen, dass der Puffer gelöscht wird, wenn es sein sollte, und akkumuliert Befehle wie es sein soll. Im Moment funktioniert der Code, und ich möchte Tests schreiben, um sicherzustellen, dass er weiter funktioniert, wenn ich das Spiel baue.
Ich könnte den Puffer Behavior
getrennt vom Event
Netzwerk im obigen Beispiel machen, aber was dann? Was ist der beste Weg, genaue Ergebnisse aus dem Test zu erhalten?
Bearbeiten: Update - Ich glaube diesen Link liefert genügend Hinweise. Ich werde es mir überlegen und morgen mit weiteren Einzelheiten berichten.
Bearbeiten: Aktualisieren - Ich habe einen Komponententest geschrieben. Ich werde nach GitHub hochladen, wenn es puerty ist, und dann posten. Der obige Link war sehr hilfreich, um herauszufinden, was zu tun ist.
Bearbeiten: Aktualisieren - Wenn Sie einen Stapeltest ausführen und es zu einem Fehler kommt und Sie ihn erneut ausführen, erhalten Sie eine Ausgabe, die besagt, dass Ihre Tests bestanden wurden. Das Ergebnis ist, ich bin nicht näher dran, dass ich gestern war. Ich habe Code und ein klareres Problem. Ich kann einen anderen Beitrag für das .ct
beginnenEdit: Update - Ich habe einen Test, der auf eine Weise bricht, die hilfreich ist, aber ich weiß nicht, was ich genau machen soll. Ich habe das gesamte Projekt für den Kontext gepostet. Im Folgenden füge ich nur den Testcode, Fehler und einige Diskussionen ein.
%Vor% Das Problem besteht darin, dass accumB
ein Behavior
in einem MomemtIO
erstellt. Wenn ich bufferPopulated
return ein IO Bool
habe, wie kann ich das abgleichen?
Edit: Das Offensichtliche ist, die gewünschte Instanz zu schreiben. Ich denke, das ist wahrscheinlich ein Red-Hering. Was denken Sie. Ist das so einfach wie das Schreiben der MomentIO Bool
Instanz?
Bearbeiten: Aktualisieren
Ich denke, ich bin auf dem richtigen Weg. Ich habe den gesamten Testkabelbaumcode auskommentiert und die Signatur für bufferPopulated
Ich glaube, das sollte funktionieren, aber hier ist der Fehler
%Vor% Schauen wir uns MonadMoment
von Reactive.Banana.Combinators
m
kann beliebig sein Monad
, IO
ist ein Monad
. also liftMoment
sollte Moment Behavior (BufferMap)
auf IO Behavior (BufferMap)
heben, warum nicht. Was stimmt nicht mit meinen Überlegungen?
Quelle der Antwort kam von dieser vorherigen Antwort.
interpretFramwork
benötigt eine neue Signatur.
Tags und Links haskell unit-testing reactive-banana