如何在JUnit5中测试引发异常?

use*_*632 2 java junit junit5

我想测试异常是否运行良好JUnit5.

例如,假设我测试队列.

public class ArrayCircleQueue {
    .
    .
    .
    public void enQueue(char item) {
        if (isFull()) {
            throw new IndexOutOfBoundsException("Queue is full now!");
        } else {
            itemArray[rear++] = item;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

识别TestClass

class ArrayCircleQueueTest {
    .
    .
    .
    @org.junit.jupiter.api.Test
    void testEnQueueOverflow() {
        for (int i=0; i<100; i++) {
            queue.enQueue('c');  # test for 10-size queue. It should catch exception
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在谷歌搜索它,但只有答案JUnit4: @Test(expected=NoPermissionException.class)

但它不起作用JUnit5.

我怎么处理它?

小智 7

@Test
void exceptionTesting() {
    Throwable exception = assertThrows(IllegalArgumentException.class, () -> {
        arrayCircleQueue.enQueue('a') ;
    });
    assertEquals("Queue is full now!", exception.getMessage());
}
Run Code Online (Sandbox Code Playgroud)

或者你可以尝试一下.