作者:_珊渣渣 | 来源:互联网 | 2022-12-05 21:10
我应该如何使用scalamock模拟嵌套的Java类,尤其是当所说的嵌套Java类来自第三方库时?
鉴于以下来源:
src / main / java / Outer.java
/**
* Outer class that offers a Nested class inaccessible from Scala :(
*/
public class Outer {
public class Nested {
}
}
src / main / java / UseNestedJavaClassFromJava.java
public class UseNestedJavaClassFromJava {
private Outer.Nested nested;
}
src / main / scala / ImportNestedJavaClass.scala
// TODO uncomment the below line to break the build
//import Outer.Nested
对scala导入行取消注释会导致编译失败,而编译UseNestedJavaClassFromJava.java可以正常工作。
带有gradle的完整最小示例:https : //github.com/billyjf/async-http-client-gradle-scala。
显然,以下问题已经解决了这一问题,但是仅仅为了测试利用带有嵌套Java类的Java库的Scala代码而采用Java粘合代码或反射技巧对我来说似乎有点不合理,是否真的没有其他解决方案?
Scala无法访问Java内部类?
1> Billy Fisher..:
我终于找到了使用Mockito的解决方案:
import org.mockito.Mockito
import org.scalamock.scalatest.MockFactory
import org.scalatest.mockito.MockitoSugar
import org.scalatest.{FlatSpec, Matchers}
class OuterNestedTest extends FlatSpec with MockFactory with Matchers with MockitoSugar {
"Nested Java class" should "be mockable using Mockito from within a scalatest" in {
val mockedNestedJavaClass = Mockito.mock(classOf[Outer#Nested])
Mockito.when(mockedNestedJavaClass.methodWithAParam("some value"))
.thenReturn("mocked", Nil: _*)
mockedNestedJavaClass.methodWithAParam("some value") shouldBe "mocked"
}
}