Java 中用 TestNg 的数据驱动时,数据的管理可能比较麻烦,因为要满足如下几个条件:
以前介绍过将数据放在 xml 文件中,但是 xml 文件还是不方便查看,为了方便查看,还是将数据放在 Java 类中最好了,IDE 可以直接 link 过去。而 jdk1.5 之后,Java 开始支持 enum,enum 也就是枚举,它有一特征就是会将每一个枚举常量转变成对象,有几个枚举常量就转变成几个对象,这一特征非常符合数据驱动的特点,于是我们将 enum 引入进来,把数据都放在 enum 中。<!--more-->
定义一个 pojo
public class TestInfo {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "TestInfo [name=" + name + ", age=" + age + "]";
}
}
将 pojo 与 enum 结合
public class TestEnum {
public static TestInfo getTestInfo(){
TestInfo ti = new TestInfo();
ti.setAge(18);
ti.setName("zhaosi");
return ti;
}
public static TestInfo getTestInfo1(){
TestInfo ti = new TestInfo();
ti.setAge(20);
ti.setName("zhangsan");
return ti;
}
public enum Demo{
TEST("http://www.baidu.com", TestEnum.getTestInfo(), "//address", "湖北"),
TEST1("http://www.baidu.com", TestEnum.getTestInfo1(), "//address", "湖北");
private String url;
private TestInfo testInfo;
private String path;
private String expectValue;
private Demo(String url, TestInfo testInfo, String path,
String expectValue) {
this.url = url;
this.testInfo = testInfo;
this.path = path;
this.expectValue = expectValue;
}
public String getUrl() {
return url;
}
public TestInfo getTestInfo() {
return testInfo;
}
public String getPath() {
return path;
}
public String getExpectValue() {
return expectValue;
}
}
}
TestNg 的数据驱动
public class TestBase {
@DataProvider
public Object[][] dataProvider(){
Class<?>[] cs = TestEnum.class.getDeclaredClasses();
Object[] ecs = null;
for (int i = 0; i < cs.length; i++) {
if(cs[i].isEnum()){
ecs=cs[i].getEnumConstants();
}
}
int count = 0;
if(ecs!=null){
count = ecs.length;
}
Object[][] obj = new Object[count][];
for (int i = 0; i < count; i++) {
obj[i] = new Object[]{ecs[i]};
}
return obj;
}
@Test(dataProvider="dataProvider")
public void testDemo(Demo d){
System.out.println(d.getTestInfo());
}
}
运行结果
TestInfo [name=zhaosi, age=18]
TestInfo [name=zhangsan, age=20]
PASSED: testDemo(TEST)
PASSED: testDemo(TEST1)
说明