2014-09-29 58 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