2013-04-26 7 views
-6

안녕하세요. 저는 제 함수를 실행하고 junit 테스트를 테스트했지만 내 junit 테스트가 실패하는 이유를 알 수 없습니다. 내가 쓴 기능이 작동하는지 확신한다. 누군가 궁금해하는 경우 숙제입니다. 여기 함수를 실행하는 중 오류가 발생했습니다.

는 코드의 JUnit 설정

public void removeAll(E x) { 
     first = first.next; 
     if (first.data == x) { 
      first = first.next; 
     } 
     Node curr = first; 
     Node fut = curr.next ; 
     while (fut!= null) { 
      if (fut.data == x) { 
       curr.next = fut.next;    
      } 
     curr=curr.next; 
     fut=fut.next; 
     } 
    assert check(); 
} 

테스트 여기

@Test 
public void test4() { 
    lst1.removeAll(3); 
    assertEquals(8, lst1.size()); 
    assertEquals(false, lst1.contains(3)); 
    lst1.removeAll(6); 
    assertEquals(5, lst1.size()); 
    assertEquals(false, lst1.contains(6)); 
    lst1.removeAll(5); 
    assertEquals(3, lst1.size()); 
    lst1.removeAll(4); 
    assertEquals(2, lst1.size()); 
    lst1.removeAll(7); 
    assertEquals(1, lst1.size()); 
    lst1.removeAll(8); 
    assertEquals(0, lst1.size()); 
} 

입니다

public class MyListTest { 
    private MyList<Integer> lst0; 
    private MyList<Integer> lst1; 
    private Integer[] a; 
    @Before 
    public void setUp() throws Exception { 
     lst0 = new MyList<Integer>(); 

     a = new Integer[] {3,4,3,5,6,8,6,6,7,5}; 
     lst1 = new MyList<Integer>(); 
     for(Integer x: a) { 
      lst1.add(x); 
     } 
} 

크기 방법

public int size() { 
    return sz; 
} 
,

당신이 완전히 당신이 처음부터 다시 시작 고려하고 작은 아직 안전한 단계를 다시 길을 갈 수 붙어있는 경우 Main 메서드

public class MyList<E extends Comparable< E>> implements Iterable<E> { 
    private Node first; 
    private int sz; 

    public MyList() { 
     first = null; 
     sz = 0; 
     assert check(); 
    } 
} 

검사 방법

private boolean check() 
{ 
    if (first == null && sz != 0) return false; 
    if (sz == 0 && first != null) return false; 
    if (sz == 1 && (first == null || first.next != null)) return false; 
    if (sz > 1 && (first == null || first.next == null)) return false; 

    int count = 0; 
    Node p = first; 
    while(p != null) { 
     count++; 
     p = p.next; 
    } 

    if (count != sz) { 
     System.out.printf("count = %d, sz = %d\n", count, sz); 
     return false; 
    } 

    return true; 
} 
+3

이 경우 오류 메시지의 "내 코드 작업 정확하게는 방법을합니까?" – creinig

+1

'처음'이란 무엇입니까? 테스트 할 때 사용하는 데이터는 어디에서 설정합니까? assert check()에서 –

+0

; 및 lst1.removeAll (3); 왜 그런지 모르겠다. 첫 번째는 연결된리스트의 첫번째 링크 –

답변

0

. 간단한 테스트와

시작 :

@Test 
public void testConstruct() { 
    MyNewList<Integer> myNewList = new MyNewList<Integer>(); 
    assertNotNull(myNewList); 
    assertEquals(0, myNewList.size()); 
} 

이제 시험을 통과 MyNewList에서 충분한 코드를 작성 - 복잡한 구조의 하지 생각을, 지금 충분 가장 간단한 솔루션 -도 size()에 대한 return 0;은 괜찮습니다.

코드를 마지막으로 테스트를 통과하면 다른 하나를 쓸 수 있습니다 :

@Test 
public void testAdd() { 
    MyNewList<Integer> myNewList = new MyNewList<Integer>(); 
    myNewList.add(5); 
    assertEquals(1, myNewList.size()); 
} 

다시 모두 시험을 통과하기 위해 충분한 코드를 구현합니다. 솔루션은 또한 다른 매개 변수와 함께 작동 여부를 확인하기 위해 테스트를 변경 성공하면 :

@Test 
public void testAdd() { 
    MyNewList<Integer> myNewList = new MyNewList<Integer>(); 
    myNewList.add(5); 
    assertEquals(1, myNewList.size()); 
    myNewList.add(7); 
    assertEquals(2, myNewList.size()); 
} 

지금 당신은 당신의 add() 방법을 신뢰하고 다음에 무엇을 결정할 수 있습니다 : 짧은 휴식을 가지고 코드를 정리 또는 구성 당신 클래스의 내부 구조, 또는 당신의 여행의 다음 목적지로 행진?

@Test 
public void testRemoveAll() { 
    MyNewList<Integer> myNewList = new MyNewList<Integer>(); 
    myNewList.add(5); 
    myNewList.add(5); 
    myNewList.add(7); 
    myNewList.add(3); 

    assertEquals(4, myNewList.size()); 
    myNewList.removeAll(3); 
    assertEquals(3, myNewList.size()); 
} 

지금 다시 모든 시험을 통과 할 충분한 코드를 작성 :

당신이 다음 퍼즐을 해결해야 당신이 마지막으로 이동

. 지금 당신은 당신의 방법이 방법을 구현할 수 :

public void removeAll(T element) { 
    size--; 
} 

완전히 위의 테스트가 설명하는 요구 사항을 충족하기 때문에이있을 것입니다.이제 우리가 강하다는 검사로 방법을 직면하자 시험 변경 : 당신은 사소한 솔루션 이전에 선택한 경우

@Test 
public void testRemoveAll() { 
    MyNewList<Integer> myNewList = new MyNewList<Integer>(); 
    myNewList.add(5); 
    myNewList.add(5); 
    myNewList.add(7); 
    myNewList.add(3); 

    assertEquals(4, myNewList.size()); 
    myNewList.removeAll(3); 
    assertEquals(3, myNewList.size()); 
    myNewList.removeAll(5); 
    assertEquals(1, myNewList.size()); 
} 

, 당신은 지금 "문제"수도를) 그래서 다시 removeAll() 방법에 대해 생각하고 확장의 테스트가 다시 통과 될 때까지 코드를 작성하십시오. 일단 코드 작업을 완료하면 안심해도됩니다.

수업 시간에 무언가를 바꾼다면 다시 시험을하여 무언가 부숴 졌는지 확인하십시오.

메소드가 변경되어야하는 요구 사항이 변경된 경우 - 새 요구 사항을 반영하도록 테스트를 변경하고 다시 실행하십시오. 첫 눈에

이 매우 지루한 보일 수도 있지만, 당신이 항상 말할 수를 설정 시험의 고체 파운데이션 부문을 일단 :

관련 문제