¿Alguien puede explicar el error de compilación a continuación? Curiosamente, si cambio el tipo de devolución del método get()
a String
, el código se compila muy bien. Tenga en cuenta que el método thenReturn
tiene dos sobrecargas: un método unario y un método varargs que toma al menos un argumento. Me parece que si la invocación es ambigua aquí, entonces siempre sería ambigua.Error de referencia ambiguo falso en el compilador/intérprete de Scala 2.7.7?
Más importante aún, ¿hay alguna manera de resolver la ambigüedad?
import org.scalatest.mock.MockitoSugar
import org.mockito.Mockito._
trait Thing {
def get(): java.lang.Object
}
new MockitoSugar {
val t = mock[Thing]
when(t.get()).thenReturn("a")
}
error: ambiguous reference to overloaded definition, both method thenReturn in trait OngoingStubbing of type
java.lang.Object,java.lang.Object*)org.mockito.stubbing.OngoingStubbing[java.lang.Object] and method thenReturn in trait OngoingStubbing of type (java.lang.Object)org.mockito.stubbing.OngoingStubbing[java.lang.Object] match argument types (java.lang.String) when(t.get()).thenReturn("a")
Abrí un boleto sobre esto, ya que descubrí que Scala ni siquiera era coherente consigo mismo. Entrada https://lampsvn.epfl.ch/trac/scala/ticket/2991. –
El ticket se cerró como no válido, y ahora hay una explicación de lo que está sucediendo, que copiaré en mi propia respuesta. En este momento, no creo que haya muchas posibilidades de un cambio en esto. –