如何用hemcrest参数化junit5中的异常?

lf3rwulv  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(300)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

20天前关门了。
改进这个问题
我想用一个参数化的测试来测试所有不同的异常,其中一个方法使用hemcrest。这意味着exception1.class,exception2.class应该是参数。如何对它们进行参数化,并使用hemcrest进行参数化?

llew8vvj

llew8vvj1#

假设您的测试方法根据场景返回不同的异常,您应该参数化fixture(对于场景)和expected(对于异常)。
用一个 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"));

  }
}

相关问题