gpt4 book ai didi

java - junit 测试 Iterable 的相等性

转载 作者:搜寻专家 更新时间:2023-10-31 20:21:25 25 4
gpt4 key购买 nike

我正在尝试为 BinarySearchTree 类编写单元测试keys() 返回一个 Iterable。它使用另一个名为 Queue 的类,其中的键被排队并返回..

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 返回的元素,而无需在您的队列类上实现相等性。

关于java - junit 测试 Iterable 的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15583186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com