Ich versuche, Unit-Tests für eine BinarySearchTree
Klasse Die keys()
gibt eine Iterable
.Es verwendet eine andere Klasse Queue
die Schlüssel in der genannten zu schreiben sind die Warteschlange gestellt und wieder ..junit Prüfung Gleichheit eines Iterable
die Warteschlange (Third Party Class) hat jedoch keine equals() definiert.
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);
}
...
}
versucht, Unit-Test zu schreiben
@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);
}
Dies scheitert
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)
Muss ich eine equals() in der Dritten Klasse implementieren oder gibt es eine andere Art und Weise zu tun um die Gleichheit zu prüfen? Alles, was ich von lief eine Schleife Warteschlangenauflösungs aus der Warteschlange q denken konnte und es mit dem, was der Iterator returned.I ist nicht sicher, ob es eine bessere Art und Weise .. Bitte geben ..
Iterable<String> actual = st.keys();
Iterator<String> actualit = actual.iterator();
while(actualit.hasNext()){
String actualkey = actualit.next();
String exp = q.dequeue();
assertEquals(actualkey,exp);
}
[Vergleich von zwei Sammlungen in Java] (http://stackoverflow.com/questions/4085353/comparing-two-collections-in-java) –