Il est écrit sur la base de la version stable junit-quickcheck v0.7 du 17 février 2018.
«Propriétés» est une caractéristique du code qui renvoie une sortie spécifique lorsqu'une entrée spécifique est donnée. Par exemple, en supposant un code qui se décompose en facteurs premiers, il existe une caractéristique = "propriété" qu'un nombre égal ou supérieur à 2 et une liste de tous les nombres décomposés en facteurs premiers correspondent. (Exemple) Lorsque n = 36, le résultat de la factorisation des nombres premiers est 2, 2, 3, 3, et une fois multiplié, il devient 2 x 2 x 3 x 3 = 36, ce qui correspond au n d'origine.
Pour les tests utilisant cette propriété, il n'est pas réaliste de tester toutes les valeurs d'entrée n, donc junit-quickcheck peut générer aléatoirement des valeurs d'entrée n et effectuer le test.
Il semble qu'il ait été inspiré par Quickcheck de Haskell.
PrimeFactorsProperties.java
@RunWith(JUnitQuickcheck.class)
public class PrimeFactorsProperties {
// 2 - Integer.MAX_Générer la valeur d'entrée n dans la plage jusqu'à VALUE (par défaut 100)
@Property
public void factorsMultiplyToOriginal(@InRange(min = "2", max = "2147483647") BigInteger n) {
//La valeur d'entrée n est supérieure à 1
assumeThat(n, greaterThan(BigInteger.valueOf(1)));
//Multipliez les résultats de la factorisation prime
BigInteger product = ONE;
for (BigInteger each : PrimeFactors.of(n))
product = product.multiply(each);
//Le n original multiplié par le résultat des correspondances de factorisation prime
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
Dans l'exemple ci-dessus, la valeur d'entrée est automatiquement générée pour le type BigInteger. La date, l'énumération, la chaîne, etc. sont également prises en charge. En définissant un générateur, vous pouvez également utiliser vos propres classes.
Dans l'exemple ci-dessus, la plage de valeurs générées par @InRange est définie.
@When(satisfies = "#_ >= 0 && #_ <= 9") int digit) {
Il est également possible de définir avec OGNL comme.
Par défaut, 100 valeurs sont générées, mais vous pouvez les modifier en définissant l'attribut trial.
@Property(trials = 250) public void northernHemisphere(
Par défaut, différentes données d'entrée sont générées chaque fois que le test JUnit est exécuté, mais en donnant une valeur de départ, les mêmes données d'entrée seront générées quel que soit le nombre d'exécutions.
@Property public void holds(@When(seed = -1L) int i) {
Je pense que les tests basés sur les propriétés sont un complément aux tests traditionnels. En ce sens, il peut être utilisé comme un moyen d'améliorer la qualité.
Recommended Posts