Frage

I-Programm meist in scala und java, scalatest in scala und JUnit für Unit-Tests verwenden. Ich möchte die gleichen Tests auf mehrere Implementierungen der gleichen Schnittstelle / Merkmal anzuwenden. Die Idee ist, zu überprüfen, ob der Schnittstellenvertrag durchgesetzt wird und Liskov Substitutionsprinzip zu überprüfen.

Zum Beispiel, wenn Implementierungen von Listen zu testen, könnten Tests umfassen:

  • Eine Instanz sollte leer sein, wenn und nur wenn und nur wenn sie die Größe Null hat.
  • Nach dem Aufruf klar, sollte die Größe Null sein.
  • ein Element in der Mitte einer Liste hinzufügen, wird der Index der rhs Elemente um eins zu erhöhen.
  • etc.

Was sind die besten Praktiken?

War es hilfreich?

Lösung

Das klingt wie könnte es ein Job für den gemeinsamen Tests sein. Gemeinsam genutzte Tests sind Tests, die von unterschiedlichen Befestigungs Objekten gemeinsam genutzt werden. Das heißt, der gleiche Testcode auf verschiedene Daten ausgeführt werden. ScalaTest hat Unterstützung dafür. Suche nach "gemeinsamen Tests" in der Dokumentation Ihrer Lieblings-Stil Eigenschaft, die Tests als Funktionen (Spec, WordSpec, FunSuite, FlatSpec, etc.) darstellt. Ein Beispiel ist die Syntax für FlatSpec:

it should behave like emptyList

Siehe Freigabe Tests in der FlatSpec Dokumentation

Andere Tipps

In Java / JUnit, ich dies in der Regel handhabt durch einen abstrakten Testfall, aus welchen Tests für die spezifische Testklasse all Tests erbten und eine Setup-Methode haben, die Umsetzung der Instanziierung. Ich kann nicht das Video abyx sehen gerade jetzt geschrieben, aber ich vermute, es ist diese allgemeine Idee.

Eine weitere interessante Möglichkeit, wenn Sie nichts dagegen haben noch einen weiteren Test-Framework Einführung wäre JDave Spezifikation Klassen.

Ich habe eine dieser mit Scalatest oder mit Scala Merkmale und Implementierungen nicht versucht, mit, aber es sollte möglich sein, etwas Ähnliches zu tun.

Contract Tests sind einfach mit JUnit 4, hier 'sa Video von Ben Rady.

Für Scala, betrachten stark Scalacheck. Alle diese Verträge sind ausdrückbar als einzeilige Spezifikationen in Scalacheck. Wenn er ausgeführt wird, wird Scalacheck eine konfigurierbare Anzahl von Probeneingängen erzeugt zufällig, und prüfen, ob alle Spezifikationen zu halten. Es geht um die meisten semantisch dichte Art und Weise möglich, Unit-Tests zu erstellen.

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