首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ScalaCheck测试java类

用ScalaCheck测试java类
EN

Stack Overflow用户
提问于 2014-09-03 22:33:33
回答 1查看 213关注 0票数 1

我正在尝试用scalacheck测试一个java类。例如,我在...\src\main\java\中有一个类队列

代码语言:javascript
复制
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\。

代码语言:javascript
复制
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示例,但它仍然不清楚。

如有任何建议,将不胜感激

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-22 01:23:31

enque的唯一可能测试是调用它并确保不引发异常。

如果这是我的分配,我将为所有List[Int]定义一个属性,并测试该任意列表中的项的排队和退出队列,这样队列返回的项与列表的顺序完全相同。

根据要求,以下是一些例子:

代码语言:javascript
复制
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:

代码语言:javascript
复制
scalaVersion := "2.11.2"

libraryDependencies ++= Seq(
  "org.scalacheck" %% "scalacheck" % "1.11.5" % "test"
)

结果:

代码语言:javascript
复制
$ 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 PM
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25654668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档