我正在學習Odersky的Coursera Scala課程,並且在第2課中爲「過濾器」函數編寫單元測試而努力(返回p中包含的一組子集)。我們創建了一個Type別名Set = Int => Boolean。我設法以令人滿意的功能編寫函數,我可以清楚地看到它正在正常工作。我聲稱這是因爲我可以使用提供的printSet函數來處理大量應用的預定義集合和謂詞,並看到預期的結果出現在控制檯中。我知道我們的Type別名是說我們確實只是定義了一個決定集合成員的規則,而不是集合本身。我有一個真正的問題是我不擅長編寫單元測試,我無法想象如何做一個斷言來測試我的過濾器(s:Set,p:Int => Boolean)函數。如何爲「過濾器」函數編寫一個scala單元測試?
我認爲,部分問題是不知道如何比較兩組的問題。試圖從字面上聲稱,從「過濾器」返回的子集等於一個確定的結果,我想這樣的事情:
val sampleSet = List(-1, 0, 1).toSet
val odd: Set = x => x % 2 != 0
val sampleResult = List(-1, 1).toSet
assert(filter(sampleSet, odd).equals(sampleResult)) //nope, doesn't work. Returns false.
assert(filter(sampleSet, odd) == sampleResult) //no good either
怎樣才能簡單地比較兩組是否包含完全相同的值?我是否過於字面?我當然感到非常愚蠢。
任何人都可以向我建議一種方法來爲此編寫單元測試嗎?單元測試沒有評分,而且我已經有了我的功能正常工作,所以我認爲在Coursera榮譽代碼的範圍內要問。即使有一點讓我頭直的暗示將深深感激。
燦爛,非常感謝你。我不得不把它們寫成assert(filter(sampleSet,odd)( - 2)),但這正是我需要看到的。如果我只是在scala工作表中完成這些工作,或者我會看到編譯器語句並意識到這一點。來自美國印第安那州的歡呼聲。 – noogrub