如何用Scala中的数字创建TestNG DataProvider? [英] How to create TestNG DataProvider out of numbers in scala?

查看:28
本文介绍了如何用Scala中的数字创建TestNG DataProvider?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这听起来很愚蠢,但我在 StackOverflow 或 Google 上都找不到答案.我需要做一个非常简单和容易的事情 - 将每个包含两个数字的 Dataprovider 传递给我的 TestNG 测试,但我没有成功.这是我的代码:

@DataProvider(name = "numbersRandomRange")def numbersRandomRange() = {数组(数组(100, 150),数组(100.10, 200.01),阵列(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(最小,最大)case (min: Double, max: Double) =>alpha.double(最小,最大)case (min: Float, max: Float) =>alpha.float(最小,最大)}val actualNumber = 计算(最小,最大)logger.info("正在使用类型函数检查自定义编号.应返回特定类型且低于指定值:")expectResult(actualNumber.getClass)(min.getClass)断言(util.less(实际数量,最大))断言(util.less(min,actualNumber))}`

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

<块引用><块引用>

Data Provider public java.lang.Object[] 必须返回 Object[][] 或 Iterator [],而不是 class [Ljava.lang.Object;

解决方案

如果对类型进行注释,则它有效:

 @DataProvider(name = "numbersRandomRange")def numbersRandomRange():Array[Array[Any]] = {//注意设置了返回类型数组(数组(100, 150),数组(100.10, 200.01),阵列(100.10f,250.10f))}

Scala 编译器将 numbersRandomRange 的返回类型推断为 Array[Array[_ >: Float with Double with Int <: AnyVal]]然后可能被 java 解释为 Object.通过给编译器一个提示,它使这项工作.

It sounds really stupid, but i couldn't find the answer neither on StackOverflow or in Google as well. I need to make really simple and easy thing - pass to my TestNG test a Dataprovider that contains two numbers in each set, but i didn't manage to succeed with it . Here's my code:

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

My test looks like this : `

  @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))
  }
`

When i try to run it, i get next Error Message :

Data Provider public java.lang.Object[] must return either Object[][] or Iterator [], not class [Ljava.lang.Object;

解决方案

If you annotate the type then it works:

  @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)
    )
  }

The scala compiler is inferring the return type of numbersRandomRange to be Array[Array[_ >: Float with Double with Int <: AnyVal]] which is then probably interpreted by java to just be Object. By giving the compiler a hint, it makes this work.

这篇关于如何用Scala中的数字创建TestNG DataProvider?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆