我正在尝试用scalacheck测试一个java类。例如,我在...\src\main\java\中有一个类队列
public class Queue<Item> {
private Node first;
private Node last;
private int N;
private class Node {
Item item;
Node next;
}
public boolean isEmpty () { return first == null; }
public int size() { return N;}
public void enqueue(Item item) {
Node oldLast = last;
last = new Node();
last.item = item;
last.next = null;
if(isEmpty())
first = last;
else
oldLast = last;
N++;
}
public Item dequeue() {
Item item = first.item;
first = first.next;
if(isEmpty())
last = null;
N--;
return item;
}}
然后,我在...\src\test\scala\中有一个scala测试类...\src\test\scala\。
import org.scalacheck.Gen.{choose, oneOf}
import org.scalacheck.Prop.forAll
import org.scalacheck.Gen.choose
import org.scalacheck._
import org.scalacheck.Prop._
class QueueTest extends Properties("Queue") {
Queue<Int> q;
property("enque") = Prop.forAll { (n: Int) =>
(q.enque(n) == n)
}
}我只需要一个关于如何扩展java泛型队列类的先导?我所要做的就是测试enqueue和dequeue方法。
我看过Rick的github的StringUtils.scala示例,但它仍然不清楚。
如有任何建议,将不胜感激
发布于 2014-09-22 01:23:31
对enque的唯一可能测试是调用它并确保不引发异常。
如果这是我的分配,我将为所有List[Int]定义一个属性,并测试该任意列表中的项的排队和退出队列,这样队列返回的项与列表的顺序完全相同。
根据要求,以下是一些例子:
import org.scalacheck.Properties
import org.scalacheck.Prop.forAll
object QueueSpec extends Properties("Queue") {
property("enqueue never throws an exception") = forAll {(xs: List[Int]) =>
val q = new Queue[Int]
xs.foreach(q.enqueue)
true
}
property("dequeue always presents elements in FIFO order") = forAll {(xs: List[Int]) =>
val q = new Queue[Int]
xs.foreach(q.enqueue)
xs.forall{_ == q.dequeue}
}
property("isEmpty always true after complete dequeue") = forAll {(xs: List[Int]) =>
val q = new Queue[Int]
xs.foreach(q.enqueue)
xs.foreach(_ => q.dequeue)
q.isEmpty
}
}build.sbt:
scalaVersion := "2.11.2"
libraryDependencies ++= Seq(
"org.scalacheck" %% "scalacheck" % "1.11.5" % "test"
)结果:
$ sbt test
[info] + Queue.enqueue never throws an exception: OK, passed 100 tests.
[info] + Queue.dequeue always presents elements in FIFO order: OK, passed 100 tests.
[info] + Queue.isEmpty always true after complete dequeue: OK, passed 100 tests.
[info] Passed: Total 3, Failed 0, Errors 0, Passed 3
[success] Total time: 2 s, completed 24/09/2014 9:28:10 PMhttps://stackoverflow.com/questions/25654668
复制相似问题