2017-04-11 7 views
0

Ich verwende Haskell Test Framework über Stack, um QuickCheck-Eigenschaften zu bewerten. Wenn ich stack test ausführen, werden fehlerhafte Eigenschaften in der Form von Gave up! Passed only 95 tests gemeldet. Die vielen Beispiele von Eigenschaftstests, die ich gefunden habe, melden Fehler in Form von Falsifiable, after 48 tests, gefolgt von den Argumenten, die fehlgeschlagen sind. In diesen Beispielen wird QuickCheck jedoch direkt anstelle von Stack und HTF ausgeführt.So melden Sie fehlgeschlagene Testfälle

Wie kann ich meine Umgebung so konfigurieren, dass die von QuickCheck generierten Argumente gemeldet werden, die die zu testende Eigenschaft nicht erfüllen konnten? Wie in Testing with HTF gezeigt, ist die Dokumentation für einige dieser Werkzeuge bereits spärlich und schlecht, geschweige denn, sie miteinander zu kombinieren.

Antwort

0

"Gave up!" bedeutet eine andere Art von Fehler als "Falsifizierbar".

QuickCheck bietet eine Möglichkeit, Testfälle zu verwerfen, die Sie als "unkorrekt" betrachten, und zählt weder zu tatsächlichen Erfolgen noch zu Fehlern. Eine typische Quelle für solche Rückwürfe ergibt sich aus der Verwendung des Implikationsoperators (==>), wobei Testfälle, die die Vorbedingung nicht erfüllen, verworfen werden: "Erfolg" wird nur gezählt, wenn die Voraussetzung erfüllt ist, um Ihnen eine bessere Vorstellung zu geben Sie testen die Nachbedingung auf der rechten Seite (was wahrscheinlich der Teil ist, der Ihnen als Benutzer wirklich wichtig ist). Explizite Verwendung der discard-Eigenschaft ist ebenfalls möglich, mit einer anderen Bedeutung als ein tatsächlicher Fehler, z. B. die Rückgabe False.

Ausgeschiedene Tests verfälschen also nicht die Eigenschaft als Ganzes (eine Implikation mit einer falschen Vorbedingung ist logisch wahr), aber zu viele ausrangierte Tests können zu einer unzureichenden Abdeckung führen, was durch den beobachteten Fehler angezeigt wird kein Gegenbeispiel zum Ausdrucken. Um diesen Fehler zu beheben, finden Sie heraus, woher die Rückwürfe kommen, mögliche Ergebnisse sind:

  • Verwenden Sie einen besseren Generator (Vermeidung von Rückwürfen);
  • erhöhen die Verwerfungsschwelle, @stefanwehr zeigt, wie dies in HTF in der anderen Antwort zu tun;
  • diese Rückwürfe sollten eigentlich Ausfälle sein.
  • +0

    Wie zu erwarten, war das eigentliche Problem meine Annahmen. Vielen Dank. – CAPSLOCK

    +0

    Ich bin ehrlich bemüht, Informationen darüber zu finden, wie ich Optionen für HTF festlegen kann. Soll dies über die Befehlszeile übergeben werden? Gibt es auch eine programmatische Option? Ich kann keine vollständige Dokumentation für diese Tools finden und es ist sehr frustrierend. – CAPSLOCK

    +0

    Tut mir leid, ich habe HTF verwirrt, über das du nach test-framework gefragt hast, worüber ich geredet habe. @stefanwehr hat die Antwort, wie man diese bestimmte Option setzt. Es scheint keine integrierte Möglichkeit zu geben, sie über die Befehlszeile anzugeben. –

    1

    @ Li-Yao Xia ist richtig, indem Sie sagen, dass Ihr Generator zu viele verwerfbare Testfälle generiert. Um die Verwerfungsschwelle mit HTF zu erhöhen, würden Sie Ihre Immobilie wie folgt schreiben:

    prop_somePropertyWithRaisedDiscardThreshold = 
        withQCArgs (\args -> args { maxDiscardRatioy = 1000 }) 
        somePredicateOrProperty 
    

    Die args Variable hat Args geben, direkt aus dem Quick Check-Paket.

    Verwandte Themen