如何在scala中使用数字创建TestNG DataProvider?

时间:2014-09-29 21:32:56

标签: scala testng

听起来真的很愚蠢,但我无法在StackOverflow或Google上找到答案。我需要制作一个非常简单易用的东西 - 传递给我的TestNG测试一个Dataprovider,每组包含两个数字,但我没有成功使用它。这是我的代码:

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

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

  
    

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

  

1 个答案:

答案 0 :(得分:2)

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

  @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[_ >: Float with Double with Int <: AnyVal]],然后由java解释为Object。通过给编译器一个提示,它使这个工作。