java – junit测试Iterable的相等性
发布时间:2020-05-24 03:05:45 所属栏目:Java 来源:互联网
导读:我正在尝试为BinarySearchTree类编写单元测试 keys()返回一个Iterable.It使用另一个名为Queue的类,其中键被入队并返回. 但是Queue(第三方类)没有定义任何equals(). public class BinarySearchTreeKey extends ComparableKey,Value { Node root ; privat
|
我正在尝试为BinarySearchTree类编写单元测试
但是Queue(第三方类)没有定义任何equals(). public class BinarySearchTree<Key extends Comparable<Key>,Value> {
Node root ;
private class Node{
private Key key;
private Value val;
private Node left;
private Node right;
private int N;
public Node(Key k,Value v,int N) {
super();
this.key = k;
this.val = v;
this.N = N;
}
}
public Iterable<Key> keys(){
Queue<Key> q = new Queue<Key>();
inOrder(root,q);
return q;
}
private void inOrder(Node x,Queue q){
if(x == null)return;
inOrder(x.left,q);
q.enqueue(x.key);
inOrder(x.right,q);
}
...
}
试图编写单元测试 @Test
public void testKeys(){
MyBST<String,Integer> st = new MyBST<String,Integer>();
st.put("S",7);
st.put("E",2);
st.put("X",8);
st.put("A",3);
st.put("R",4);
st.put("C",1);
st.put("H",5);
st.put("M",6);
Queue<String> q = new Queue<String>();
q.enqueue("A");
q.enqueue("C");
q.enqueue("E");
q.enqueue("H");
q.enqueue("M");
q.enqueue("R");
q.enqueue("S");
q.enqueue("X");
Iterable<String> actual = st.keys();
assertEquals(q,actual);
}
这失败了 java.lang.AssertionError: expected: std.Queue<A C E H M R S X > but was: std.Queue<A C E H M R S X >
at org.junit.Assert.fail(Assert.java:93)
at org.junit.Assert.failNotEquals(Assert.java:647)
at org.junit.Assert.assertEquals(Assert.java:128)
at org.junit.Assert.assertEquals(Assert.java:147)
at week4.MyBSTTests.testKeys(BSTTests.java:304)
我是否必须在第三方类中实现equals(),还是有其他方法来检查相等性?我能想到的只是从队列q中运行一个循环,并将它与迭代器返回的内容进行比较.我不确定是否有更好的方法..请指教.. Iterable<String> actual = st.keys();
Iterator<String> actualit = actual.iterator();
while(actualit.hasNext()){
String actualkey = actualit.next();
String exp = q.dequeue();
assertEquals(actualkey,exp);
}
解决方法使用Hamcrest的Matchers.contains(描述 here).例如:assertThat(queue1.keys(),Matchers.contains("A","C","E","H","M","R","S","X"));
这将检查Iterable返回的元素,而不需要在队列类上实现相等. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
