2014-11-08 5 views
0

데이터 배열 클래스에 대한 테스트 케이스를 작성하고 있습니다. 인덱스가있을 때이 부분의 경우, 괜찮 junit test assert, writing test

public short value(int index) throws Exception { 
    // what block-th buffer 
    int block = (index * REC_SIZE)/BLOCK_SIZE; 
    int offset = (index * REC_SIZE) % BLOCK_SIZE; 

    byte[] curr = bufferPool.getBuffer(block).readBuffer(); 
    short returnValue = ByteBuffer.wrap(curr) 
      .getShort(offset + INDEX_VALUE); 

    assert ((returnValue > 0) && (returnValue <= 30000)) : "Invalid" 
      + " <Value>: not between 1 to 30000"; 
    return returnValue; 
} 

그러나 나는 또한

assert ((returnValue > 0) && (returnValue <= 30000)) : "Invalid" 
     + " <Value>: not between 1 to 30000"; 

입니다 어설 라인을 테스트 할 필요가

30000 0 ~ 나는 JUnit 테스트를 쓸 수있는 방법이 I 인덱스가 0에서 30000 사이가 아닌지 확인할 수 있습니까?

답변

1

테스트를 통해 예외가 발생한다고 예상 할 수 있습니다 (잘 기억하는 경우 JUnit 4 이후).

@Test (expected = Exception.class) 
public void myTest(){ 
    value(3005); 
} 

그러나 주장이 해제 될 수 있음을주의하십시오, 그래서 어떤 계산을하기 전에 인덱스의 값을 확인하는 IllegalArgumentException을 사용하고

@Test (expected = IllegalArgumentException.class) 
public void myTest(){ 
    value(3005); 
} 

다시 읽기 귀하의 질문에, 난 index (이 경우 IllegalArgumentException을 사용할 수 있음) 또는 returnValue (사용자 정의 예외를 사용할 수 있음)의 값을 테스트 할 것인지 확실하지 않습니다.

하지만 테스트 케이스에는 assert 문을 사용하지 마십시오. assert 문은 프로그램의 디버그 모드 용입니다. 누군가가 어설 션을 사용하지 않고 실행하면 검사도하지 않습니다. 그래서 Exception을 던져라. (내가 보여 줬던 것처럼 당신의 유닛 테스트에서 그들을 잡아라.)