2017-12-02 16 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); 

} 

私はペアの値を抽出するためにゲッターを作成しようとしたが、Netbeansのは、私は、パブリックAPIを介してプライベートなものを渡した、しかも私はそれを取得していなかったことを私にwarnered。 公開クラスPair <>を宣言してもこれをテストする正しい方法ではないと思います。私はそれをまだテストしていないextract()メソッドを使用していません。

答えて

1

クラスをテストするには、ユーザーがどのように使用するのか、内部状態についてあまり心配する必要はありません。

は、私はあなたが、私はそれはあなたがインスタンスを返すましたので、あなたがエラーになったように聞こえますがペア

の値を抽出するためにゲッターを作成しようとした

で正しい軌道に乗っていたと思いますあなたのプライベートクラスのPair<P,V>。あなたの質問からインターフェイスがあなたのクラスの動作を期待しているかどうかはわかりませんが、public V pop()または類似の機能を削除して、PriorityQueueの次の項目を返すように思えます。この例ではVタイプ、ではなく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

関連する問題