2011-11-10 85 views
3

我想寫一些代碼來測試數據庫模型。測試框架和數據庫框架都使用「===」運算符,並且測試框架被優先考慮。我如何明確使用一種方法或另一種方法?斯卡拉衝突的繼承方法名稱

例子:

import org.scalatest.FunSuite 

class TestDBModels extends FunSuite{ 
    test("Test DoublePropertyEntry with a few new values") { 
    Schemas.doubleProperties.deleteWhere(p => (p.id === p.id))) 
    } 
} 

錯誤:

type mismatch; 
found : Option[String] 
required: org.squeryl.dsl.ast.LogicalBoolean 
Schemas.doubleProperties.deleteWhere(p => (p.===(p.id, p.id))) 

回答

3

你有多種選擇。第一個也是最簡單的是使用顯式方法調用,而不是隱式轉換。例如,要明確地使用scalatest ===:

Schemas.doubleProperties.deleteWhere(p => (convertToEqualizer(p.id) === p.id))) 

如果太長,你可以縮短名稱:

def toEq(left: Any) = convertToEqualizer(left: Any) 
Schemas.doubleProperties.deleteWhere(p => (toEq(p.id) === p.id))) 

convertToEqualizer是scalatest隱式轉換方法。另一個選擇是重寫convertToEqualizer作爲非隱式方法:

override def convertToEqualizer(left: Any) = new Equalizer(left) 

這將停止這個特定的隱式轉換的發生。請參閱scalatest documentation for Assertions objectsame question on the scalatest-users mailing list

+0

這裏重要的一點是隱式def的覆蓋,對某些不隱含的內容。這將關閉自動使用scalatest的'==='方法。然後,**如果你想使用斷言和scalatest的'===',你可以明確地調用convertToEqualizer,或者簡單地使用'new Equalizer'。就個人而言,我會使用'ShouldMatchers'來代替,因爲我更喜歡'a應該等於(b)'到更強制性的聲明'assert(a === b)',或者在這種情況下,'assert(toEq(a)== = b)'。 –

+0

@LuigiPlinge編輯澄清一點。 –