如何在 JUnit5 中测试引发异常?
How can I test raise exception in JUnit5?
我想使用 JUnit5
.
测试异常是否正常工作
例如,假设我测试队列。
public class ArrayCircleQueue {
.
.
.
public void enQueue(char item) {
if (isFull()) {
throw new IndexOutOfBoundsException("Queue is full now!");
} else {
itemArray[rear++] = item;
}
}
}
测试类
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
}
}
}
我在google里搜索,但是只有JUnit4
的答案:
@Test(expected=NoPermissionException.class)
但它不适用于 JUnit5
。
我该如何处理?
在 JUnit 5 中,您可以使用 TestExecutionExceptionHandler
:
的自定义扩展来做类似的事情
import org.junit.jupiter.api.extension.TestExecutionExceptionHandler;
import org.junit.jupiter.api.extension.TestExtensionContext;
public class HandleExtension implements TestExecutionExceptionHandler {
@Override
public void handleTestExecutionException(TestExtensionContext context,
Throwable throwable) throws Throwable {
// handle exception as you prefer
}
}
然后在您的测试中,您需要使用 ExtendWith
:
声明该扩展
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
public class ExceptionTest {
@ExtendWith(HandleExtension.class)
@Test
public void test() {
// your test logic
}
}
@Test
void exceptionTesting() {
Throwable exception = assertThrows(IllegalArgumentException.class, () -> {
arrayCircleQueue.enQueue('a') ;
});
assertEquals("Queue is full now!", exception.getMessage());
}
或者你也可以试试。
我想使用 JUnit5
.
例如,假设我测试队列。
public class ArrayCircleQueue {
.
.
.
public void enQueue(char item) {
if (isFull()) {
throw new IndexOutOfBoundsException("Queue is full now!");
} else {
itemArray[rear++] = item;
}
}
}
测试类
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
}
}
}
我在google里搜索,但是只有JUnit4
的答案:
@Test(expected=NoPermissionException.class)
但它不适用于 JUnit5
。
我该如何处理?
在 JUnit 5 中,您可以使用 TestExecutionExceptionHandler
:
import org.junit.jupiter.api.extension.TestExecutionExceptionHandler;
import org.junit.jupiter.api.extension.TestExtensionContext;
public class HandleExtension implements TestExecutionExceptionHandler {
@Override
public void handleTestExecutionException(TestExtensionContext context,
Throwable throwable) throws Throwable {
// handle exception as you prefer
}
}
然后在您的测试中,您需要使用 ExtendWith
:
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
public class ExceptionTest {
@ExtendWith(HandleExtension.class)
@Test
public void test() {
// your test logic
}
}
@Test
void exceptionTesting() {
Throwable exception = assertThrows(IllegalArgumentException.class, () -> {
arrayCircleQueue.enQueue('a') ;
});
assertEquals("Queue is full now!", exception.getMessage());
}
或者你也可以试试。