1

我有一堆参数化的 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
  }
}

我想从不同的测试套件运行它们,每个测试套件都有不同的 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);
  }
} 

但它不起作用:我得到“MyTestX 类上没有公共静态参数方法”。

有没有办法从测试套件而不是测试用例中指定参数?如果可能的话,我想避免为每个测试、每个测试套件创建一个新类。

4

4 回答 4

1

我有一个类似的问题。通过创建一个包含@Parametersand的抽象类来修复它@RunWith(Parameterized.class)。这个类被测试套件中的所有测试扩展。我发现的一件事是,无论这些注释是在您的测试套件中还是在您的测试中,@Parameters都将在@BeforeClassand之前调用。@Before希望这会有所帮助。

于 2012-07-25T03:39:03.357 回答
0

我正在学习 Junit 和 WebDriver,在练习 junit 的过程中,我也遇到了类似的错误。不确定我的答案会有多大用处,但值得一试。

请检查您的导入语句,并且应该有正确的参数语句,即import org.junit.runners.Parameterized.Parameters

如果它与任何其他参数语句冲突,则尝试删除其他语句并仅保留此语句。

这解决了我的问题。

刚刚看到这篇文章已经 2 岁了,但这可能会帮助其他任何人现在遇到同样的问题。

于 2015-02-17T18:06:52.583 回答
0

听起来您想使用相同的参数运行不同的测试。

参数化测试用于使用不同参数运行相同的测试。如果您的测试不完全相同,那么您需要不同的测试。

您需要做的是@Test向您的类添加不同的方法,MyTestX而忘记参数化测试。这样你就只有一堂课了,你的考试会以一种清晰的方式组织起来。

于 2012-05-05T16:03:07.480 回答
0

我想从不同的测试套件运行它们,每个测试套件都有不同的 MyParameter 值。

您的要求与以下的正常行为不同Parameterized:如果您定义测试层次结构并Object[][]为它们分配相同的参数集 (),则 JUnit 框架将使用第一个测试用例的所有参数运行测试,然后再转到下一个测试用例并使用所有参数运行它。

因此,如果您想在转到下一个参数之前先对单个参数执行所有测试,则需要另一个 runner。看看这个为您提供ParameterizedSuiteRunner 的库。

参数化的测试套件如下所示:

@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}};
    }
于 2016-07-04T22:31:24.460 回答