我正在开发一个 Scala 项目,使用 Mockito 作为模拟框架。我想模拟以下通用 Scala 方法:
def parseXml[T: ClassTag](xmlUrl: URL, xsdUrl: Option[URL]): Option[T]
当嘲笑时,我假设我可以使用 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 不接受它,因为它不允许在同一个存根调用中混合匹配器和非匹配器。
最重要的是,您必须显式提供第三个参数,并将其设为匹配器:
when(parseXml[AddressBook](any, any)(any))
.thenReturn(Some(defaultAddressBook))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)