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)))
4

1 に答える 1

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の暗黙的な変換メソッドです。もう1つのオプションは、convertToEqualizerを非暗黙的なメソッドとしてオーバーライドすることです。

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

これにより、この特定の暗黙の変換が発生しなくなります。アサーションオブジェクトのscalatestドキュメントと、scalatest-usersメーリングリストの同じ質問を参照してください。

于 2011-11-10T12:19:29.670 に答える