2012-04-28 3 views
0

자바 프로그래밍에 익숙하지 않습니다.이 클래스를 테스트 할 수있는 방법을 이해하려고합니다. 내가 시작되는 각 시험 전에 비워 자동으로 재설정 QueueTest라는 JUnit을 만들고 싶어이 JUnit 테스트 케이스에 혼란 스럽습니다.

public class Queue<E> { 

private ArrayList<E> items; 

public Queue(){ 
    items = new ArrayList<E>(); 
} 

public void join(E e) { 
    items.add(e); 
} 

public E leave() throws EmptyQueueError { 
    if (items.isEmpty()) { 
     throw new EmptyQueueError(); 
    } 
    return items.remove(0); 

} 

} 

: 나는 큐 클래스를 만들었습니다? 그런 다음 빈 큐에서 항목을 제거하면 EmptyQueueError가 throw되는지 확인해야합니다. 마지막으로 여러 항목이 (처음에는) 빈 대기열에 참여할 때 처음 남은 항목 중 첫 번째 항목 인 것을 확인하고 싶습니다.

다음과 같은 튜토리얼입니다.하지만 이해가되지 않습니다. 위의 클래스를 만들었고 JTest 클래스를 시도했습니다.

package queue; 

public class QueueTest<e> { 

private Queue q; 

@Before 
public void setUp() throws Exception { 
} 

@After 
public void tearDown() throws Exception { 
} 

@Test 
public void test() { 
    q = new Queue<e>(); 
    assertEquals("Empty Queue", 0, q); 

} 

} 

달성하려는 목표에 가깝습니까? 나는 첫번째 것을하려고 노력하고있다.

도움을 주셔서 감사합니다.

+0

어떤 문제가 발생합니까? 테스트가 컴파일되지 않거나 실행되지 않습니까? – duffymo

+0

실행하지 못했습니다. 아마 내가 그 일을 끝내지 못해서 일거야. 나는 논리적으로 이해하지 못한다. – DesignAndCode

+0

컴파일됩니까? 어떻게 그것을 실행하려고합니까? – duffymo

답변

1

잘하고 있습니다.

@Test 
public void test() { 
    q = new Queue<e>(); 
    assertEquals("Empty Queue", 0, q); 

} 

이 문제는 새 Queue 인스턴스를 만들지 만 아무 것도하지 않는다는 것입니다.

그런 다음 테스트의 내장은 이것이 의미하는 것은 당신이 즉시 ('B')를 항목을 얻으려고, 큐 ('A')을 만들 것이다

@Test 
public void test() { 
    Queue<Integer> q = new Queue<Integer>();  // A 
    try { 
     Integer ignore = q.leave();  // B 
     fail("exception expected");    // C 
    } catch (EmptyQueueError ex) { 
     // implicit success      // D 
    } 
} 

을 수 있습니다. 이로 인해 예외가 발생해야합니다. 그렇지 않은 경우 "예외 예상"('C')으로 테스트가 실패합니다. 예상 예외가 발생하면 코드 작업 ('D')

이 작업을 수행하면 더 게시 할 예정입니다.

+0

이것은 많은 의미가 있습니다. A, B, C 및 D에 대해 의견을 보내 주셔서 감사합니다. 클릭했습니다. 토니, 시간 내 주셔서 감사합니다. – DesignAndCode

0

시험해보세요. 나를 위해 달립니다. 너는 멀리 떨어져 있지 않다.

package cruft; 

import org.junit.Assert; 
import org.junit.Test; 

public class QueueTest { 
    @Test 
    public void test() { 
     Queue<String> q = new Queue<String>(); 
     Assert.assertEquals("queue should be empty", 0, q.size()); 

    } 
} 

공지 사항 : 당신은 단지 시험에 인스턴스를 생성해야

package cruft; 

    import java.util.ArrayList; 

    public class Queue<E> { 

     private ArrayList<E> items; 

     public Queue(){ 
      items = new ArrayList<E>(); 
     } 

     public void join(E e) { 
      items.add(e); 
     } 

     public E leave() throws EmptyQueueError { 
      if (items.isEmpty()) { 
       throw new EmptyQueueError(); 
      } 
      return items.remove(0); 

     } 

     // Note: I added this. 
     public int size() { return this.items.size(); } 
    } 
} 

그리고 여기 테스트입니다. 큐에 보유 할 구체적인 유형의 항목 (이 경우 String)이 있는지 확인하십시오.

제네릭이 당신에게 해주고있는 것을 기억하십시오.이 제네릭을 사용하면 동작이 유지되는 객체의 유형에 의존하지 않는 컬렉션이나 컨테이너를 만들 수 있습니다. 따라서 Strings 또는 Persons 또는 Penguins가 포함 된 Queue를 가질 수 있습니다.

+0

나는 그가 예외를 생성하기 위해 leave()를 호출하려고한다고 생각한다. –

+0

나는 그의 수업을 시험하는 법을 배우고 싶어한다. 이것은 단지 예일뿐입니다. 클래스 패스에 클래스 E가 없으면, 당신의 예제에 문제가있을 것입니다. – duffymo

+0

His _leave() _가 E를 반환합니다. –

0

여기에서 무엇을 테스트하려고합니까? assertEquals("Empty Queue", 0, q) 할 때 여기서 시험하려고하는 것은 무엇입니까? 대기열이 비어 있다고?

asserts의 경우 일반적으로 IE Q == 0을 테스트하며 테스트에 실패하면 인쇄되는 선택적 메시지를 사용합니다.

assertEquals이 실패한 이유는 q의 값이 무엇인지 조사하면 알 수 있습니다.당신은 매우 엄격하고 싶다면, 당신은 아마하는지 테스트해야

public class QueueTest { 

    private Queue q = new Queue(); 

    @BeforeMethod 
    public void setUp() throws Exception { 
     q.reset(); 
    } 

    @Test(expectedExceptions = EmptyQueueError.class) 
    public void shouldThrowIfRemovingFromEmpty() { 
    assertTrue(q.isEmpty()); 
    q.remove(0); 
    } 

} 

: 여기

0

는 예외를 테스트하는 방법과 각 시험 방법 전에 큐를 재설정하는 방법을 보여 TestNG 방법으로 할 수 있습니다 각 큐는 초기에 비어 있으며 두 개의 개별 테스트 메소드에서 예외가 발생합니다.

관련 문제