2017-12-02 152 views
0

这是我的课,我如何确保insert()方法正常工作?如何确保我的arrayList中嵌套的私有类的对象是我想要的对象?

public class HeapQueue<P extends Comparable<? super P>, V> 
    implements PriorityQueue<P, V> { 

private final ArrayList<Pair<P, V>> pairs = new ArrayList<>(); 

private static class Pair<P extends Comparable<? super P>, V> 
     implements Comparable<Pair<P, V>> { 

    private final P priority; 
    private final V value; 

    public Pair(P priority, V value) { 
     this.priority = priority; 
     this.value = value; 
    } 

    @Override 
    public int compareTo(Pair<P, V> o) { 
     return priority.compareTo(o.priority); 
    } 

} 

我试过这个测试,但是我不能保证对象<>是正确的。

@Test 
public void insertPrioritatAltaTest() { 

    HeapQueue hq = new HeapQueue(); 
    Priority p1 = null; 
    try { 
     p1 = new Priority("Alta"); 
    } catch (InvalidInputError iie) { 

    } 
    int a = 1; 

    hq.insert(p1, a); 
    assertEquals(hq.size(),1); 

} 

我试图创建getter方法来提取对的价值,但Netbeans的warnered我,我路过一个私人的事情,通过一个公共的API,而且我并没有获得它。 我不认为宣布公开课Pair <>是正确的方法来测试此。既不使用我还没有测试过的方法extract()。

回答

1

通过使用它来测试你的课程通常是最容易的,用户将如何使用它,而不用担心太多的内部状态。

,我认为你是在正确的轨道上

我试图创建干将虽然这听起来像你,因为你正在返回一个实例收到错误提取双

的价值您的私人课程Pair<P,V>。我不确定你的问题究竟是如何界面期望你的班级行为,但你似乎想要一个public V pop()或类似的功能,能够删除并返回您的PriorityQueue下一个项目。请注意,在此示例中,您将返回V类型,而不是 a Pair

如果这就是你要找的行为,你的测试将类似于:

@Test 
public void insertPrioritatAltaTest() { 
    HeapQueue hq = new HeapQueue(); 
    hq.insert(new Priority("A"), 1); 
    hq.insert(new Priority("C"), 2); 
    hq.insert(new Priority("B"), 3); 

    assertEquals(hq.pop(), 1); 
    assertEquals(hq.pop(), 3); 
    assertEquals(hq.pop(), 2); 
} 
+0

谢谢,我变得非常沮丧......这完美地工作 – Jo4nP4l4u