java - ScalaMock 模拟泛型 Java 接口重载方法
问题描述
我正在尝试模拟具有不同数量参数的重载方法的 Java 通用接口。接口代码为:
import java.util.concurrent.Callable;
public interface GOInterface<T> {
void send(T record);
void send(T record, Callable<T> onComplete);
}
我尝试使用 onComplete 功能模拟发送,如下所示:
导入 java.util.concurrent.Callable
import org.scalamock.scalatest.MockFactory
import org.scalatest.{FlatSpec, Matchers}
class JavaInterfaceTest extends FlatSpec with Matchers with MockFactory {
behavior of "scalamock"
it should "mock java generic interface with overloaded method (with different number of parameters)" in {
var result = ""
val m = mock[GOInterface[String]]
(m.send(_: String, _: Callable[String])).expects(*, *)
.onCall{ case(s: String, c: Callable[String]) => c.call()}.once
m.send("hello", new Callable[String] {
override def call(): String = {result = "world"; result}
})
result should be("world")
}
it should "mock java generic interface with overloaded method (with different number of parameters) 2" in {
var result = ""
val m = mock[GOInterface[String]]
(m.send(_: String)).expects(*).once
m.send("hello")
result should be("")
}
}
我从编译器得到的错误是:
error: value expects is not a member of (String, java.util.concurrent.Callable[String]) => Unit
[ERROR] (m.send(_: String, _: Callable[String])).expects(*, *)
[ERROR] ^
error: value expects is not a member of String => Unit
[ERROR] (m.send(_: String)).expects(*).once
[ERROR]
查看 ScalaMock git上的不同示例,我可以看到没有测试可以检查具有不同参数计数的重载方法的通用接口。
我的依赖是:
<dependency>
<groupId>org.scalamock</groupId>
<artifactId>scalamock-scalatest-support_2.11</artifactId>
<version>3.6.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scalamock</groupId>
<artifactId>scalamock-core_2.11</artifactId>
<version>3.6.0</version>
<scope>test</scope>
</dependency>
同时,我在 ScalaMock 存储库中创建了一个错误。
解决方案
首先,我建议升级到最新版本的 ScalaMock,但可能也存在围绕泛型和重载的极端情况。
为了解决这个问题,在许多情况下,首先锁定类型会有所帮助,然后创建一个模拟:
trait StringGoInterface extends GoInterface[String]
val m = mock[StringGoInterface]
推荐阅读
- flutter - 坏影子颤动
- r - 将一列分成不同的列
- macos-big-sur - 绕过 MacOS 11.4 网守以使用 IPP 9.0 遗留代码测试应用程序
- gitlab - 取决于列表中的另一个元素
- javascript - 使用 Ramda 进行逻辑优化
- visual-studio-code - Visual Studio Code 删除代码元素
- mathjax - 在 html 自定义元素(shadow DOM)中渲染 Mathjax
- excel - 如何从 Excel ActiveX 旋转按钮中删除 3d 阴影?
- azure-devops - 针对单个构建代理或针对代理池的管道?
- javascript - TypeError:indexedDB.databases 不是函数