我已在 ScalaCheck user guide中读到它是用于测试Scala和 Java 程序的工具。
我想知道,这只是营销,还是使用它来测试仅使用Java的代码库是一个合理的想法?如果是这样,将它与Java项目集成的最佳方法是什么?
答案 0 :(得分:7)
不,这不仅仅是营销。功能Java(http://functionaljava.org/)使用ScalaCheck进行测试。 FJ来源中的一些测试用例: https://github.com/functionaljava/functionaljava/blob/724081f0f87f34b2f4c26b8b748877955180ecaa/props-core-scalacheck/src/test/scala/fj/data/CheckList.scala
我不确定将ScalaCheck集成到现有Java项目中的最佳方法是什么,但我想你可以借鉴FJ中的一些想法。
答案 1 :(得分:3)
您可以将其集成到测试Java代码中。测试代码将使用ScalaCheck在Scala中编写,但测试的代码可能是Scala或Java。 如果您已经使用scala进行测试,则应考虑使用ScalaTest或Specs2。
答案 2 :(得分:0)
实际上,您可以在纯Java中编写ScalaCheck测试 ,尽管您必须手动解决Scala implicits。
例如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
}
}
使用build.sbt
scalaVersion := "2.12.3"
libraryDependencies += "org.scalacheck" %% "scalacheck" % "1.13.5" % Test
可以翻译为Java
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);
}
}
和
public class Runner {
public static void main(String[] args) {
CommutativityTest$.MODULE$.main(args);
}
}
使用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>
输出:
+ Commutativity Test.commutativity: OK, passed 100 tests.