2014-11-08 5 views
0

Я пишу тестовые примеры для своего класса массива данных. В этой части, это нормально, когда индекс находится в пределах от 0 до 30000.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 линию, которая

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

Как я могу написать тест JUnit, что я может проверить, когда индекс не находится между 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 для своих тестовых случаев. Утверждения утверждают только для режима отладки вашей программы. Если кто-то запускает его с отключением утверждений, вы не проверяете даже проверку. Поэтому вместо этого выбросьте Исключение (и поймайте их в своих модульных тестах, как я показал).