当前位置: 首页 > 知识库问答 >
问题:

如何在scala中用数字创建TestNG数据提供程序?

苏涛
2023-03-14

这听起来很愚蠢,但我在StackOverflow或Google上都找不到答案。我需要做一件非常简单的事情——将一个每个集合中包含两个数字的数据提供程序传递给我的TestNG测试,但我没有成功。这是我的代码:

@DataProvider(name = "numbersRandomRange")
def numbersRandomRange() = {
Array(Array(100, 150),
  Array(100.10, 200.01),
  Array(100.10f, 250.10f)
  )
}

我的测试看起来是这样的

  @Test(dataProvider = "numbersRandomRange")
  def testNumbersRandomRange(min: Any, max: Any) {
    def calculate(minValue: Any, maxValue: Any): Any = (minValue, maxValue) match {
      case (min: Int, max: Int) => alpha.number(min, max)
      case (min: Double, max: Double) => alpha.double(min, max)
      case (min: Float, max: Float) => alpha.float(min, max)
    }
    val actualNumber = calculate(min, max)
    logger.info("Checking custom number with  type function. Should return with specific type and below specified value : ")
    expectResult(actualNumber.getClass)(min.getClass)
    assert(util.less(actualNumber, max))
    assert(util.less(min, actualNumber))
  }
`

当我试图运行它时,我得到下一条错误消息:

数据提供程序公共java.lang.Object[]必须返回Object[][]或Iterator[],而不是类[Ljava.lang.OObject;

共有1个答案

鄢英哲
2023-03-14

如果您注释类型,那么它就可以工作:

  @DataProvider(name = "numbersRandomRange")
  def numbersRandomRange():Array[Array[Any]] = { //Notice that the return type is set
    Array(Array(100, 150),
      Array(100.10, 200.01),
      Array(100.10f, 250.10f)
    )
  }

scala编译器正在推断numbersRandomRange的返回类型为Array[Array[_

 类似资料:
  • 我已使用以下方法在应用程序中输入凭据。 其中EnterText定义如下: 在测试类中,我写了下面的代码 我得到以下错误: 失败:loginProxy(“11”,“Priya”)java.lang.NumberFormatException:java.lang.Integer处为空。parseInt(未知源)位于java.lang.Integer。parseInt(未知源) 请帮助解决同样的问题。据

  • 有人知道TestNG如何根据为测试方法指定的数据提供者名称计算出数据提供者方法是什么吗? 我找到了这个解决方案:https://gist.github.com/ae6rt/3805639 但是,它没有考虑到数据提供者可能是: 在完全不同的类别中定义,或 在父类中定义,并且 该方法可以是静态的,也可以是非静态的 我试图自己破解一些东西,但后来我想我不可能是第一个试图解决这个问题的人,特别是因为显然T

  • 我想在类中与数据提供者并行运行测试方法。我需要一个数据提供者,它每次在新测试方法开始为给定的测试运行生成部分动态数据之前都会被调用。让我用伪代码解释一下: 我怎样才能做到这一点?

  • 我有一个TestNG Dataprovider测试,如下所示: 输入csv 读者 测验 有许多输入文件,每个测试都包含一个优先级。我想单独运行优先级为1的测试。 在没有数据提供者的情况下,我可以使用下面的IMethodInterceptor过滤测试。 样品测试: 由于数据提供者的优先级是动态的,因此我无法根据优先级过滤测试。 不应执行其他测试,而应跳过其他测试。

  • 我是Spock的新手,目前正在使用它,但我继承了大量需要重复使用的测试配置文件。每个配置文件都是一个JSON,与Spec类同名。对于每种试验方法,都有一个带有参数的地图列表,例如: TestNG允许我在数据提供者方法中传递测试方法名称,因此我可以根据测试类名和测试方法名称返回映射列表。我的基类中只有一个数据提供者方法: 作为这种方法的结果,我得到了一组映射,用于每个测试迭代。然后我将这个方法指定为

  • 我正在尝试通过TestNG进行多线程测试为测试实例化WebDrivers<代码>@AfterMethod在测试后关闭WebDrivers