Question

J'ai lu dans le Scalacheck mode d'emploi que c'est un outil pour tester Scala et Java programmes.

Je me demande, est-ce simplement du marketing ou tester la base de code Java uniquement avec ce serait une idée raisonnable? Et si oui, quelle est la meilleure façon de l'intégrer au projet Java?

Était-ce utile?

La solution

Non, ce n'est pas seulement le marketing. Java funcional (http://fonctionaljava.org/) est testé avec Scalacheck. Quelques cas de test dans les sources FJ:https://github.com/fonctionaljava/fonctionaljava/blob/724081f0f87f34b2f4c26b8b748877955180ecaa/props-core-scalacheck/src/test/scala/fj/data/checkst.scala

Je ne sais pas quelle est la meilleure façon d'intégrer Scalacheck dans un projet Java existant, mais je suppose que vous pourriez emprunter quelques idées à la façon dont cela se fait dans FJ.

Autres conseils

Vous pouvez l'intégrer pour tester le code Java. Le code de test sera écrit en scala en utilisant Scalacheck, mais le code testé peut être Scala ou Java. Si vous utilisez déjà Scala pour les tests, vous devriez envisager d'utiliser Scalatest ou Specs2.

En fait vous boîte Écrire des tests Scalacheck en Java pur Bien que vous devrez résoudre les implicits de scala manuellement.

Par exemple le code dans Scala

import org.scalacheck.Properties
import org.scalacheck.Prop.forAll

object CommutativityTest extends Properties("Commutativity Test") {
  property("commutativity") = forAll { (a: Int, b: Int) =>
    a + b == b + a
  }
}

avec build.sbt

scalaVersion := "2.12.3"

libraryDependencies += "org.scalacheck" %% "scalacheck" % "1.13.5" % Test

peut être traduit en java comme

import org.scalacheck.*;
import org.scalacheck.util.Pretty;
import scala.math.Numeric;

public class CommutativityTest$ extends Properties {
    public static final CommutativityTest$ MODULE$ = new CommutativityTest$();

    public CommutativityTest$() {
        super("Commutativity Test");

        Arbitrary arbInt = Arbitrary.arbInt();
        Shrink shrinkInt = Shrink.shrinkIntegral(Numeric.IntIsIntegral$.MODULE$);

        Prop prop = Prop.forAll(
                (Integer a, Integer b) -> a + b == b + a,
                Prop::propBoolean,
                arbInt,
                shrinkInt,
                Pretty::prettyAny,
                arbInt,
                shrinkInt,
                Pretty::prettyAny
        );

        property().update("commutativity", () -> prop);
    }
}

et

public class Runner {
    public static void main(String[] args) {
        CommutativityTest$.MODULE$.main(args);
    }
}

avec pom.xml

<project...

    <dependencies>
        <dependency>
            <groupId>org.scalacheck</groupId>
            <artifactId>scalacheck_2.12</artifactId>
            <version>1.13.5</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.scala-lang.modules</groupId>
            <artifactId>scala-java8-compat_2.12</artifactId>
            <version>0.8.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Le résultat:

+ Commutativity Test.commutativity: OK, passed 100 tests.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top