Es basiert auf der stabilen Version junit-quickcheck v0.7 vom 17. Februar 2018.
"Eigenschaften" ist ein Merkmal des Codes, der eine bestimmte Ausgabe zurückgibt, wenn eine bestimmte Eingabe gegeben wird. Unter der Annahme eines Codes, der in Primfaktoren zerlegt wird, gibt es beispielsweise ein Merkmal = "Eigenschaft", dass eine Zahl von 2 oder mehr und eine Liste aller Zahlen, die in Primfaktoren zerlegt wurden, übereinstimmen. (Beispiel) Wenn n = 36 ist, ist das Ergebnis der Primfaktorisierung 2, 2, 3, 3, und wenn es multipliziert wird, wird es 2 x 2 x 3 x 3 = 36, was dem ursprünglichen n entspricht.
Bei Tests mit dieser Eigenschaft ist es nicht realistisch, alle Eingabewerte n zu testen, sodass junit-quickcheck zufällig Eingabewerte n generieren und den Test durchführen kann.
Es scheint, dass es von Haskells Quickcheck inspiriert wurde.
PrimeFactorsProperties.java
@RunWith(JUnitQuickcheck.class)
public class PrimeFactorsProperties {
// 2 - Integer.MAX_Generieren Sie den Eingabewert n im Bereich bis VALUE (Standard 100).
@Property
public void factorsMultiplyToOriginal(@InRange(min = "2", max = "2147483647") BigInteger n) {
//Der Eingabewert n ist größer als 1
assumeThat(n, greaterThan(BigInteger.valueOf(1)));
//Multiplizieren Sie die Ergebnisse der Primfaktorisierung
BigInteger product = ONE;
for (BigInteger each : PrimeFactors.of(n))
product = product.multiply(each);
//Das ursprüngliche n multipliziert mit dem Ergebnis der Primfaktorisierungsübereinstimmungen
System.out.println("n = " + n);
assertEquals(n, product);
}
}
n = 529647233
n = 1429992675
n = 1879932678
n = 1507927300
n = 1812653008
n = 393176714
n = 368739357
n = 1728382176
n = 607948744
n = 601709453
n = 1993428603
Im obigen Beispiel wird der Eingabewert automatisch für den BigInteger-Typ generiert. Datum, Aufzählung, Zeichenfolge usw. werden ebenfalls unterstützt. Durch Definieren eines Generators können Sie auch Ihre eigenen Klassen verwenden.
Im obigen Beispiel wird der von @InRange generierte Wertebereich festgelegt.
@When(satisfies = "#_ >= 0 && #_ <= 9") int digit) {
Es ist auch möglich, mit OGNL wie einzustellen.
Standardmäßig werden 100 Werte generiert. Sie können diese jedoch ändern, indem Sie das Testattribut festlegen.
@Property(trials = 250) public void northernHemisphere(
Standardmäßig werden bei jeder Ausführung des JUnit-Tests unterschiedliche Eingabedaten generiert. Durch Angabe eines Startwerts werden jedoch dieselben Eingabedaten generiert, unabhängig davon, wie oft sie ausgeführt werden.
@Property public void holds(@When(seed = -1L) int i) {
Ich denke, dass eigenschaftsbasierte Tests eine Ergänzung zu herkömmlichen Tests sind. In diesem Sinne kann es als Mittel zur Qualitätsverbesserung eingesetzt werden.
Recommended Posts