Java 参数化测试套件
我有一系列参数化JUnit4测试,它们看起来都像:Java 参数化测试套件,java,junit,junit4,Java,Junit,Junit4,我有一系列参数化JUnit4测试,它们看起来都像: @RunWith(Parameterized.class) public class MyTestX { private final MyParameter param; public TestX(MyParameter param) { this.param = param; } @Test public void myTest() { // Some test code } } 我想从不同的测
@RunWith(Parameterized.class)
public class MyTestX {
private final MyParameter param;
public TestX(MyParameter param) {
this.param = param;
}
@Test
public void myTest() {
// Some test code
}
}
我想从不同的测试套件中运行它们,每个套件的MyParameter值都不同
我尝试了以下方法:
@RunWith(Suite.class)
@SuiteClasses( { MyTest1.class, MyTest2.class, ... })
public class MyTestSuite1 {
@Parameters
public static Collection<Object[]> data() {
Object[][] data = {{ new MyParameter(1) )}};
return Arrays.asList(data);
}
}
@RunWith(Suite.class)
@SuiteClass({MyTest1.class,MyTest2.class,…})
公共类MyTestSuite1{
@参数
公共静态收集数据(){
对象[][]数据={{new MyParameter(1))};
返回数组.asList(数据);
}
}
但它不起作用:我得到“MyTestX类上没有公共静态参数方法”
有没有办法从测试套件而不是测试用例中指定参数?
如果可能的话,我希望避免为每个测试、每个测试套件创建一个新类。听起来您希望使用相同的参数运行不同的测试 参数化测试用于使用不同的参数运行相同的测试。如果您的测试不完全相同,那么您需要不同的测试
您需要做的是将不同的
@Test
方法添加到MyTestX
类中,并忘记参数化测试。然后您将只有一个类,并且您的测试将以清晰的方式组织。听起来您希望使用相同的参数运行不同的测试
参数化测试用于使用不同的参数运行相同的测试。如果您的测试不完全相同,那么您需要不同的测试
您需要做的是将不同的
@Test
方法添加到MyTestX
类中,并忘记参数化测试。然后你就只有一门课了,你的测试将以一种清晰的方式组织起来。我也遇到了类似的问题。通过创建包含@Parameters
和@RunWith(Parameterized.class)
的抽象类修复了此问题。该类由测试套件中的所有测试扩展。我发现的一件事是,@参数
将在@BeforeClass
和@before
之前调用,无论这些注释是在测试套件还是测试中。希望这能有所帮助 我也有类似的问题。通过创建包含@Parameters
和@RunWith(Parameterized.class)
的抽象类修复了此问题。该类由测试套件中的所有测试扩展。我发现的一件事是,@参数
将在@BeforeClass
和@before
之前调用,无论这些注释是在测试套件还是测试中。希望这能有所帮助 我正在学习Junit和WebDriver,在练习Junit的过程中,我也遇到了类似的错误。我不知道我的答案有多有用,但值得一试
请检查您的导入语句,并应具有正确的参数语句,即导入org.junit.runners.Parameterized.parameters
如果它与任何其他parameters语句冲突,请尝试删除其他语句并仅保留此语句
这解决了我的问题
刚刚看到这篇文章已经有2年了,但这可能会帮助其他人解决同样的问题。我正在学习Junit和WebDriver,在我练习Junit的过程中,我也遇到了类似的错误。我不知道我的答案有多有用,但值得一试 请检查您的导入语句,并应具有正确的参数语句,即导入org.junit.runners.Parameterized.parameters 如果它与任何其他parameters语句冲突,请尝试删除其他语句并仅保留此语句 这解决了我的问题 刚刚看到这篇文章已经2年了,但这可能会帮助其他人得到同样的问题 我想从不同的测试套件中运行它们,每个套件的MyParameter值都不同 您的需求与
参数化的的正常行为不同:如果您定义了测试的层次结构,并将相同的参数集(Object[][]
)分配给它们,JUnit框架将使用第一个测试用例的所有参数运行测试,在它转到下一个测试用例并使用所有参数运行它之前
因此,如果您想在转到下一个参数之前首先执行单个参数的所有测试,您需要另一个运行程序。请查看为您提供ParameterizedSuite
Runner的
参数化测试套件如下所示:
@RunWith(ParameterizedSuite.class)
@SuiteClasses({OneTest.class, TwoTest.class})
public class MyParameterizedTestSuite {
@Parameters(name = "Parameters are {0} and {1}")
public static Object[] params() {
return new Object[][] {{'A',1}, {'B',2}, {'C',3}};
}
我想从不同的测试套件中运行它们,每个套件的MyParameter值都不同
您的需求与参数化的的正常行为不同:如果您定义了测试的层次结构,并将相同的参数集(Object[][]
)分配给它们,JUnit框架将使用第一个测试用例的所有参数运行测试,在它转到下一个测试用例并使用所有参数运行它之前
因此,如果您想在转到下一个参数之前首先执行单个参数的所有测试,您需要另一个运行程序。请查看为您提供ParameterizedSuite
Runner的
参数化测试套件如下所示:
@RunWith(ParameterizedSuite.class)
@SuiteClasses({OneTest.class, TwoTest.class})
public class MyParameterizedTestSuite {
@Parameters(name = "Parameters are {0} and {1}")
public static Object[] params() {
return new Object[][] {{'A',1}, {'B',2}, {'C',3}};
}
我认为要实现这一点,您必须扩展Suite和参数化的runner类,以便前者捕获参数数据并将其传递给子runner,后者接收参数数据而不是来自带注释的方法,我认为,为了实现这一点,您必须扩展套件和参数化的运行程序类,以便前者捕获参数数据并将其传递给子运行程序,后者接收参数数据,而不是来自带注释的方法,而是来自套件运行程序。