使用参数化测试的多个实例创建 JUnit 测试套件

发布于 2024-08-20 13:54:21 字数 1470 浏览 4 评论 0原文

我想从多个文本文件创建一个 TestSuite。每个文本文件应该是一个测试并包含该测试的参数。我创建了一个测试,如下所示:

@RunWith(Parameterized.class)
public class SimpleTest {
  private static String testId = "TestCase 1";
  private final String parameter;

  @BeforeClass
  public static void beforeClass() {
    System.out.println("Before class " + testId);
  }

  @AfterClass
  public static void afterClass() {
    System.out.println("After class " + testId);
  }

  @Before
  public void beforeTest() {
    System.out.println("Before test for " + testId + ":" + parameter);
  }

  @After
  public void afterTest() {
    System.out.println("After test for " + testId + ":" + parameter);
  }

  @Parameters
  public static Collection<String[]> getParameters() {
    //Normally, read text file here.
    return Lists.newArrayList(new String[] { "Testrun 1" }, new String[] { "Testrun 2" });
  }

  public SimpleTest(final String parameter) {
    this.parameter = parameter;
  }

  @Test
  public void simpleTest() {
    System.out.println("Simple test for " + testId + ":" + parameter);
  }

  @Test
  public void anotherSimpleTest() {
    System.out.println("Another simple test for " + testId + ":" + parameter);
  }
}

现在我想创建一个多次运行此测试的套件。但因为 Parameterized、BeforeClass 和 AfterClass 都只运行一次,所以这似乎有点不可能。

所以,总结一下:

  1. 我想多次运行测试。
  2. 每次我需要一个输入参数(如文本文件的名称)时,
  3. 每次应调用 BeforeClass、AfterClass 和Parameters 函数时,
  4. 我宁愿不为每个文本文件创建一个子类。

这可能吗?

I want to create a TestSuite from multiple text files. Each textfile should be one Test and contains the parameters for that test. I have created a Test like:

@RunWith(Parameterized.class)
public class SimpleTest {
  private static String testId = "TestCase 1";
  private final String parameter;

  @BeforeClass
  public static void beforeClass() {
    System.out.println("Before class " + testId);
  }

  @AfterClass
  public static void afterClass() {
    System.out.println("After class " + testId);
  }

  @Before
  public void beforeTest() {
    System.out.println("Before test for " + testId + ":" + parameter);
  }

  @After
  public void afterTest() {
    System.out.println("After test for " + testId + ":" + parameter);
  }

  @Parameters
  public static Collection<String[]> getParameters() {
    //Normally, read text file here.
    return Lists.newArrayList(new String[] { "Testrun 1" }, new String[] { "Testrun 2" });
  }

  public SimpleTest(final String parameter) {
    this.parameter = parameter;
  }

  @Test
  public void simpleTest() {
    System.out.println("Simple test for " + testId + ":" + parameter);
  }

  @Test
  public void anotherSimpleTest() {
    System.out.println("Another simple test for " + testId + ":" + parameter);
  }
}

Now I want to create a Suite which runs this test multiple times. But because the Parameterized, BeforeClass and AfterClass all runs only once, this seems a bit impossible.

So, to sum it up:

  1. I want to run a Test multiple times.
  2. Each time I need an input parameter (Like the name of a textfile)
  3. Each time the BeforeClass, AfterClass and Parameters functions should be called
  4. I rather not make a subclass for each text file.

Is this possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

停顿的约定 2024-08-27 13:54:21

我认为您可以使用 @Before 和 @After,但它们在每个测试之前或之后运行。如果您可以忍受它,请使用它们。如果您需要在所有测试方法之后执行该操作,我认为没有类似的事情。

您可以通过在 @After 方法中使用一些条件来模拟它吗?

I think you can use @Before and @After, but they run before or after each test. If you can live with it, use them. If you need to execute that after all test methods, I don't think there's anything like that.

Could you perhaps simulate it by using some conditionals in an @After method?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文