私はScalaを学習している最中であり、今日、私たちのプロジェクトの1つにScalaを紹介することに自信を持っています。
このアプリケーションは多くのJPA/Hibernateを実行し、ScalaでJavaインターフェースの1つを実装し始めました。unittestコードをScalaに変換しようとするまで、すべてうまくいきました。
私はEasymockを多用していますが、コードは非常に自明です。問題は、Scalaでは、型指定されていないjava.util.Listを予期している場所に型付きjava.util.Listを返すことができないことだと思います。残念ながら、型パラメーターを期待するものをScalaにキャストさせる方法がわかりません。
私の問題を説明/再現するコード:
package some.package.name
import java.util.ArrayList
import java.util.List
import javax.persistence.Query
import org.easymock.EasyMock._
import org.junit.Assert._
import org.junit.Test
class MyGreatScalaTest {
@Test
def testSomething() : Unit = {
val mockQuery: Query = createMock(classOf[Query])
val mockResult: List[String] = new ArrayList[String]
mockResult.add("great value")
expect(mockQuery.getResultList).andReturn(mockResult)
replay(mockQuery)
assertEquals(
(mockQuery.getResultList.asInstanceOf[List[String]]).get(0),
"great value")
verify(mockQuery)
}
}
これにより、次のコンパイラエラーが発生します。
[WARNING] found : java.util.List[String]
[WARNING] required: java.util.List[?0] where type ?0
[WARNING] expect(mockQuery.getResultList).andReturn(mockResult)
[WARNING] ^
ご覧のとおり、java.util.Listを返すjavax.persistence.Queryのインターフェースを実装するためのモックが必要です。