你有多个构造函数可以使用JUnit / WebDriver进行参数化

时间:2014-03-23 16:53:10

标签: junit selenium-webdriver

    @RunWith(Parameterized.class)
public class ParameterizedTestCase {

public String username;
public String password;
public int pin;

    public ParameterizedTestCase(String username,String password, int pin){
    this.username=username;
    this.password=password;
    this.pin=pin;
}

@Parameters
 public static Collection<Object[]> getData(){

    Object [][] testData = new Object [3][3];

    testData [0][0] = "user1";
    testData [0][1] = "user1pass";
    testData [0][2] = 2345;

    testData [1][0] = "user2";
    testData [1][1] = "user2pass";
    testData [1][2] = 6789;

    testData [2][0] = "user3";
    testData [2][1] = "user3pass";
    testData [2][2] = 1234;

    return Arrays.asList(testData);
}

}

    @Test
    public void loginTest(){    

    System.out.println("Login Test -- " + username + " -- " + password + " 
             --   " + pin);

    }

上面的代码可以在JUnit4中进行参数化。

我想为另一组数据添加另一个构造函数和getData()方法,以便在同一个类中进行参数化。

例如:

public ParameterizedTestCase(String city,String month, String Day, String year)

public static Collection<Object[]> getData()

您可以在Junit4中使用多个构造函数来参数化测试数据吗?

我知道只要构造函数参数形成唯一的签名

,Java就允许多个构造函数

我尝试但没有成功。

请指教。谢谢!

1 个答案:

答案 0 :(得分:0)

据我所知,这是不可能的。但如果这不是问题,你可以尝试JUnitParams framework这似乎是你想要的。有两个概念here的简短描述,下面是您需要的摘要,取自项目的文档:

1)依赖

<dependency>
  <groupId>pl.pragmatists</groupId>
  <artifactId>JUnitParams</artifactId>
  <version>1.0.2</version>
  <scope>test</scope>
</dependency>

2)@RunWith(JUnitParamsRunner.class)

3)测试代码配置

简短版

@Test
@Parameters({ 
        "17, false", 
        "22, true" })
public void personIsAdult(int age, boolean valid) throws Exception {
    assertThat(new Person(age).isAdult(), is(valid));
}


长/复杂版

@Test
@Parameters(method = "adultValues")
public void personIsAdult(int age, boolean valid) throws Exception {
    assertEquals(valid, new Person(age).isAdult());
}

private Object[] adultValues() {
    return $(
                 $(13, false),
                 $(17, false),
                 $(18, true),
                 $(22, true)
            );
}