2
私は私が(理由は値クラス消去の)私は理解していくつかの奇妙なエラーメッセージが表示され、取得していますが、私はMockitoにはない驚いて 値クラス(extends AnyVal
)のインスタンスを返すメソッドを模擬しようとしていますそれに対処する。?
私のクラス:
case class MyValueClass(value: String) extends AnyVal
私はモックとしたい機能:
trait ToMock {
def something(someParams: String): MyValueClass
}
そしてモック:
val theMock = mock[ToMock]
val returned = MyValueClass("test")
when(theMock.something("test")).thenReturn(returned)
このコードは、次のエラーが発生します。
MyValueClass cannot be returned by something()
something() should return String
しかし、私は、それは文字列を返すようならば、もちろん、それはもうコンパイルされません...
私はextends AnyVal
を削除する場合は、もちろん、それが正常に動作します。
Mockitoは、あなたのScalaのタイプについて "郵便番号" を与えます。 javapを使って、バイトコードファイルの内容を最初にチェックすることによって、そのメソッドの* true *シグネチャを理解します。あなたのスカラー感覚が、Mockitoがその決定を下すために使用しているコンテンツと一致することを本当に確かめるために。 – GhostCat
それは問題です:コンパイルするにはScalaにMyValueClassが必要ですが、値クラスであるためバイトコードで消去されるので、実行時にはmockitoはラップされた値(私の例ではString)を必要とします。私は回避策を探しているだけです。 – Guillaume
は方法を見つけ、あなたが解決策を見つけたうれしい – Guillaume