如何用Scala中的数字创建TestNG DataProvider? [英] How to create TestNG DataProvider out of numbers in scala?
问题描述
这听起来很愚蠢,但我在 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屋!