gpt4 book ai didi

scala - 在 mockito 中模拟通用 scala 方法

转载 作者:行者123 更新时间:2023-12-04 14:09:49 26 4
gpt4 key购买 nike

我正在使用 Mockito 作为模拟框架进行 Scala 项目。我想模拟以下通用 Scala 方法:

def parseXml[T: ClassTag](xmlUrl: URL, xsdUrl: Option[URL]): Option[T] 

在 mock 时,我假设我可以像这样使用 Mockito 的匹配器:
when(xmlFileUnmarshallerMock.parseXml[org.mockito.Matchers.any[AddressBook]](org.mockito.Matchers.any[URL], org.mockito.Matchers.any[Option[URL]]))
.thenReturn(Some(defaultAddressBook))

但它不会编译,然后我尝试使用 [Any] 和 [AddressBook],但都导致以下错误:
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:  Invalid use of argument matchers! 3 matchers expected, 2 recorded.

最佳答案

问题是你的 parseXml函数实际上需要三个参数,而不是两个,这就是 T : ClassTag语法是以下的简写:

def parseXml[T](xmlUrl: URL, xsdUrl: Option[URL])(implicit classTag: ClassTag[T]): Option[T] 

当您尝试模拟它时,scala 隐式提供第三个参数,但 mockito 不接受它,因为它不允许在同一个 stub 调用中混合匹配器和非匹配器。

最重要的是,您必须明确提供第三个参数,并使其成为匹配器:
when(parseXml[AddressBook](any, any)(any))
.thenReturn(Some(defaultAddressBook))

关于scala - 在 mockito 中模拟通用 scala 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39013764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com