2014-09-29 56 views
0

这听起来很愚蠢,但我无法在StackOverflow或Google上找到答案。我需要做一些非常简单和容易的事情 - 传递给我的TestNG测试一个Dataprovider,它包含每个集合中的两个数字,但是我没有设法成功。这里是我的代码:如何用scala中的数字创建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)) 
    } 
` 

当我尝试运行它,我得到下一个错误信息:

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

回答

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。通过给编译器一个提示,它使这个工作。

+0

是的,的确,你是对的)我是新的,应该有一个简单的解决方案:) :)非常感谢 – 2014-09-30 05:41:45

+0

我能够成功地运行测试,但Intelij IDEA抱怨输入一点点,这就是使得它很开心,我不得不将''Array [Array [Any]]'的返回类型改为':Array [Array [_>:Int with double with float <:AnyVal]]' – 2014-09-30 07:58:41

+0

@AndrewZakordonetes Intellij会抱怨有时非常好,scalaz源代码就是一个很好的例子。 – Noah 2014-09-30 13:02:13