我正在学习Scala,今天我有信心将其引入到我们的一个项目中。该应用程序做了很多JPA/Hibernate相关的工作,我开始用Scala实现其中一个Java接口。一切都很顺利,直到我试图将一些单元测试代码翻译成Scala。
我经常使用Easymock,代码相当易于理解。我想问题在于,Scala不允许我返回一个带有类型java.util.List,而它期望一个不带类型的。不幸的是,我不知道如何让Scala将期望类型参数的东西强制转换为没有类型参数的东西。
以下是说明/重现我的问题的代码:
我经常使用Easymock,代码相当易于理解。我想问题在于,Scala不允许我返回一个带有类型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] ^
如您所见,我需要模拟实现javax.persistence.Query接口,该接口返回一个java.util.List。
mockResult: List[_]
,然后放弃使用asInstanceOf
? - Daniel C. Sobral