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

} 

나는 쌍의 값을 추출하는 게터를 작성했지만, 넷빈즈 내가 공개 API를 통해 개인 일을 통과되었고, 또한 내가 그것을 획득되지 않았 음을 나에게 warnered. public class Pair <>을 선언하는 것이 이것을 테스트하는 올바른 방법이라고 생각하지 않습니다. 나도 아직 그것을 테스트하지 않은 추출법()을 사용하지 마십시오.

답변

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