如何使用 hamcrest 参数化 JUnit 5 中的异常?
How to parameterize exceptions in JUnit5 with hemcrest?
我想通过使用 hemcrest 的一种参数化测试来测试所有不同的异常。所以这意味着 Exception1.class, Exception2.class 应该是参数。我如何参数化它们,并使用 hemcrest 来实现?
假设你的方法被测试returns 根据场景不同的异常,你应该参数化夹具(对于场景)和预期(对于异常)。
用Foo.foo(String input)
方法测试如:
import java.io.FileNotFoundException;
public class Foo {
public void foo(String input) throws FileNotFoundException {
if ("a bad bar".equals(input)){
throw new IllegalArgumentException("bar value is incorrect");
}
if ("inexisting-bar-file".equals(input)){
throw new FileNotFoundException("bar file doesn't exit");
}
}
}
它可能看起来像:
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.stream.Stream;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import org.junit.jupiter.api.Assertions;
public class FooTest {
@ParameterizedTest
@MethodSource("fooFixture")
void foo(String input, Class<Exception> expectedExceptionClass, String expectedExceptionMessage) {
Assertions.assertThrows(
expectedExceptionClass,
() -> new Foo().foo(input),
expectedExceptionMessage
);
}
private static Stream<Arguments> fooFixture() {
return Stream.of(
Arguments.of("a bad bar", IllegalArgumentException.class, "bar value is incorrect"), Arguments.of("inexisting-bar-file", FileNotFoundException.class, "bar file doesn't exit"));
}
}
我想通过使用 hemcrest 的一种参数化测试来测试所有不同的异常。所以这意味着 Exception1.class, Exception2.class 应该是参数。我如何参数化它们,并使用 hemcrest 来实现?
假设你的方法被测试returns 根据场景不同的异常,你应该参数化夹具(对于场景)和预期(对于异常)。
用Foo.foo(String input)
方法测试如:
import java.io.FileNotFoundException;
public class Foo {
public void foo(String input) throws FileNotFoundException {
if ("a bad bar".equals(input)){
throw new IllegalArgumentException("bar value is incorrect");
}
if ("inexisting-bar-file".equals(input)){
throw new FileNotFoundException("bar file doesn't exit");
}
}
}
它可能看起来像:
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.stream.Stream;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import org.junit.jupiter.api.Assertions;
public class FooTest {
@ParameterizedTest
@MethodSource("fooFixture")
void foo(String input, Class<Exception> expectedExceptionClass, String expectedExceptionMessage) {
Assertions.assertThrows(
expectedExceptionClass,
() -> new Foo().foo(input),
expectedExceptionMessage
);
}
private static Stream<Arguments> fooFixture() {
return Stream.of(
Arguments.of("a bad bar", IllegalArgumentException.class, "bar value is incorrect"), Arguments.of("inexisting-bar-file", FileNotFoundException.class, "bar file doesn't exit"));
}
}