2016-08-18 106 views
2

我正在使用Mockito作爲嘲諷框架的Scala項目。我想嘲笑以下通用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)) 

但它不會編譯,然後我都嘗試使用[任何]和[通訊錄],但在下面的錯誤兩個結果:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Invalid use of argument matchers! 3 matchers expected, 2 recorded. 

回答

4

的問題是,你的parseXml功能其實有三個參數,而不是兩個,這是什麼T : ClassTag語法速記:

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

當你試圖嘲笑它,斯卡拉隱含提供第三個參數,但它的Mockito不接受它,因爲它不允許在同一個混合的匹配和不匹配殘留電話。

底線是,你必須明確地提供第三個參數,並使其匹配:

when(parseXml[AddressBook](any, any)(any)) 
    .thenReturn(Some(defaultAddressBook))