设计帮助:testng dataprovider中的Hashmap

时间:2013-01-03 17:49:34

标签: design-patterns testng

我一直在使用TestNG的DataProvider功能编写测试脚本。直到现在我对我的方式感到满意,因为我传递的参数数量少于10,但我测试的一些新页面有超过30-35个参数,将这些参数添加到测试方法中它看起来真的很难看,所以我开始使用varArgs'Object ......'。

它是一种动态传递参数的好方法,但是使用它们很困难,因为你必须非常小心索引并且如果必须为很多方法做这些事情就容易出错。

我尝试将测试数据作为ArrayList>传递,其中HashMap是Column Name-Value对,但是TestNG不接受这个,因为HashMap不能被转换为Object []。我之所以想到使用HashMap,是因为你可以查询一个键并获取它的值,并且密钥是我所知道的。我本可以编写一个通用方法来获取值并将其分配给表示页面上字段名称的变量。

数据源(XLS)仅存储在页面上输入的测试数据,因此它纯粹是数据驱动的而不是基于关键字的。我正在测试的所有页面都是数据输入页面。

在测试数据上获得某种身份的最佳方法是什么,并让TestNG接受它。

非常感谢在这方面的任何帮助。

谢谢你, 约翰

1 个答案:

答案 0 :(得分:2)

为什么不使用Map作为测试方法的参数,并且你的dataprovider返回的参数数组只包含每个数据集的映射:

public class MyTest {

  @Test(...)
  public void testThis(Map<String,Object> args) {
    String arg1 = (String) args1.get("args1");
    ...
  }

  @Dataprovider(...)
  public Object[][] dataprovider() {
    return new Object[][]{
      { map("arg1", "foo") },
      { map("arg1", "bar", "arg2", new Object() }
    };
  }

  private Map<String,Object> map(Object... kv) {
    //helper that creates Map from Array for brevity.
  }

}

这应该通过模拟名为参数传递的其他语言来简化变量参数的使用。

相关问题