2011-11-10 9 views
3

データベースモデルをテストするためのコードを記述しようとしています。テストフレームワークとデータベースフレームワークの両方で "==="演算子が使用され、テストフレームワークに優先権が与えられています。 1つのメソッドを明示的に使用するにはどうすればよいですか?スカラーが継承しているメソッド名と矛盾します

例:

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の暗黙の何かへの上書きです。これにより、スカatestの '==='メソッドの自動使用が無効になります。次に**アサーションとスカラテストの '==='を使いたい場合は、明示的にconvertToEqualizerを呼び出すか、単に「新しいイコライザ」を呼び出すことができます。個人的には、私は、もっと緊急の声を出す(a === b)、あるいはこの場合、 'assert(toEq(a)== = b) '。 –

+0

@LuigiPlingeさんが少し明確に編集しました。 –

関連する問題