4

私は 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」とほぼ同じ結果が得られます)。これが何を意味するのか、および/または型エラーを修正する方法を知っている人はいますか?

4

0 に答える 0