私は Java を数年間使用していますが、Scala は初めてで、まだその型システムを理解しようとしています。Eclipse Scala IDE 3.0.1 で Scala 2.10.2、Slick 1.0.1、および ScalaMock 2.10-3.0-M4 を使用しています。
ScalaMockを使用してSlickをモックアウトしようとしています。updateNameById
def updateNameById(id: Int, input: String, users: RichTable[Object]) = {
users.where(_.id === id).map{ e => e.test }.update(input)
}
abstract class RichTable[T](name: String = "blank")
extends slick.driver.MySQLDriver.simple.Table[T](name) {
def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
def test = column[String]("test")
}
(私は実際に users: RichTable[User] を渡していますが、 User には複雑な継承階層がありますが、例を単純化するために User の使用を一時的に削除しました)
users.where
を返すscala.slick.lifted.Query
ので、次のようにこれをモックしようとします
class ModelTest extends FlatSpec with MockFactory {
def test = {
val mockUsers = mock[RichTable[Object]]
// mockQuery definition
val mockQuery = mock[scala.slick.lifted.Query[RichTable[Object],
scala.slick.lifted.NothingContainer#TableNothing]]
(mockUsers.where _).expects(*).returns(mockQuery)
Main.updateNameById(1, "asdf", mockUsers)
}
}
mockQuery 定義により、これらの不可解な型エラーが発生します
type mismatch;
found : scala.slick.lifted.Query[O(in method union),
scala.slick.lifted.NothingContainer#TableNothing]
required: scala.slick.lifted.Query[(some other)O(in method union),
scala.slick.lifted.NothingContainer#TableNothing]
type mismatch;
found : scala.slick.lifted.Query[O(in method unionAll),
scala.slick.lifted.NothingContainer#TableNothing]
required: scala.slick.lifted.Query[(some other)O(in method unionAll),
scala.slick.lifted.NothingContainer#TableNothing]
「O(in method union[all])」と「(some other)O(in method union[All])」が何を意味するのかわかりません.Googleは何の助けにもなりませんでした(それは問題を助けません)その「その他」は非常に一般的なフレーズです。「scala some other type error」をグーグル検索すると、「scala type error」とほぼ同じ結果が得られます)。これが何を意味するのか、および/または型エラーを修正する方法を知っている人はいますか?