2016-11-30 57 views
0

當我爲了測試利用spark-testing-base火花檢測基地奇怪校驗失敗

Map("result" -> Array(3, 6, 9, 12, 15, 18, 21, 24, 27, 0)) did not equal Map("result" -> Array(3, 6, 9, 12, 15, 18, 21, 24, 27, 0)) 

爲一個測試情況下,火花應用執行sbt test

val input: Map[String, Any] = Map("digits" -> Seq(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)) 
val expectedOutput: Map[String, Any] = Map("result" -> Array(3, 6, 9, 12, 15, 18, 21, 24, 27, 0)) 
val result = SimpleContext.runTheJOb(session, input) 

最小例子可以發現https://github.com/geoHeil/apache-spark-restAPI-example

編輯

w孔測試用例直接

class SimpleTest extends FunSuite with SharedSparkContext with DatasetSuiteBase { 

    test("SimpleContext should multiply input numbers by 3") { 
    val session = spark 

    val input: Map[String, Any] = Map("digits" -> Seq(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)) 
    val expectedOutput: Map[String, Any] = Map("result" -> Array(3, 6, 9, 12, 15, 18, 21, 24, 27, 0)) 
    val result = SimpleContext.runTheJOb(session, input) 
    assert(expectedOutput === result) 
    } 
} 
+0

@LostInOverflow最小的「代碼」已包含在內。但是如果你喜歡整個代碼,我會編輯這個問題。 –

+0

謝謝!你的要點可能會在任何時候失效,這個問題不僅適用於你。 – 2016-11-30 20:47:42

回答

4

您有問題是,Scala的Array S,在引擎蓋下是Java數組,沒有可比性使用==(參見this answer用於解釋)。

實施例:

scala> Array(1,2) == Array(1,2) 
res0: Boolean = false 

然而大多數其他集合的可比:

scala> List(1,2) == List(1,2) 
res1: Boolean = true 

您的選項將是要麼使用其他集合(如List)中的一個或以使用deep進行比較:

scala> Array(1,2).deep == Array(1,2).deep 
res22: Boolean = true 

scala> Array(1,2).deep == Array(1,3).deep 
res23: Boolean = false 
+2

所以Array(1,2)應該等於(Array(1,2))通過http://www.scalatest.org/user_guide/using_matchers#checkingEqualityWithMatchers應該是解決方案。 –