gpt4 book ai didi

java - 如何参数化 junit 测试套件

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:05 25 4
gpt4 key购买 nike

是否可以在 junit 4 中参数化 TestSuite?

为了将类声明为测试套件,我需要注解@RunWith(Suite.class),但同样的注解也需要将测试声明为参数化:@RunWith( Parameterized.class) 所以我不能将两者添加到同一个类。

我找到了一个类似的 question在这个网站上没有多大帮助。到目前为止,我找到的所有示例都解释了如何参数化简单的单元测试,而不是完整的测试教程。

最佳答案

我认为基本答案是否定的,因为正如您所说,@RunsWith 只接受一个参数。我找到了一个 blog posting that got a bit creative如何处理这种情况。

我们不使用参数化测试,但您可以像我们一样创建一个单独的套件,它只列出测试类,参数化测试可以是其中的一部分。我修改了我们的测试套件以将参数化测试类包含到套件的一部分并且它运行良好。我们像下面这样创建我们的套件,其中 PrimeNumberCheckerTest 是我从网络上提取的一个简单的。

package com.jda.portfolio.api.rest.server;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({ com.mycompany.api.rest.server.resource.TestCartResourceJava.class,
com.mycompany.api.rest.server.resource.TestCustomerResource.class,
com.mycompany.api.rest.server.resource.TestWizardProfileResource.class,
com.mycompany.api.rest.server.interceptor.TestBaseSearchInterceptor.class,
com.mycompany.api.rest.server.resource.TestQueryParameters.class,
com.mycompany.api.rest.server.expression.TestCartExpressionGenerator.class,
com.mycompany.api.rest.server.expression.TestPreferenceExpressionGenerator.class,
com.mycompany.api.rest.server.PrimeNumberCheckerTest.class,
})
public class AllTests {}

这是参数化测试用例的源代码;

package com.jda.portfolio.api.rest.server:

import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Parameterized.class)
@SuiteClasses({PrimeNumberCheckerTest.class})
public class PrimeNumberCheckerTest {
private Integer inputNumber;
private Boolean expectedResult;
private PrimeNumberChecker primeNumberChecker;

@Before
public void initialize() {
primeNumberChecker = new PrimeNumberChecker();
}

// Each parameter should be placed as an argument here
// Every time runner triggers, it will pass the arguments
// from parameters we defined in primeNumbers() method
public PrimeNumberCheckerTest(Integer inputNumber,
Boolean expectedResult) {
this.inputNumber = inputNumber;
this.expectedResult = expectedResult;
}

@Parameterized.Parameters
public static Collection primeNumbers() {
return Arrays.asList(new Object[][] {
{ 2, true },
{ 6, false },
{ 19, true },
{ 22, false },
{ 23, true }
});
}

// This test will run five times since we have as many parameters defined
@Test
public void testPrimeNumberChecker() {
System.out.println("Parameterized Number is : " + inputNumber);
assertEquals(expectedResult,
primeNumberChecker.validate(inputNumber));
}

关于java - 如何参数化 junit 测试套件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22051705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com