2014-07-14 16 views
5

Vorrei stub una funzione che restituisce AnyVal utilizza Mockito a Scala (Specs2 per la precisione), ma non cucitura al lavoro:Come simulare la funzione restituendo AnyVal con Mockito in Scala/Specs2?

import org.specs2.mutable._ 
import org.specs2.mock._ 

case class V(s: String) extends AnyVal 

class A { 
    def f: V = new V("Hello") 
} 

class Sample extends Specification with Mockito { 
    "Mockito" should { 
     "mock A" in { 
      val a = mock[A] 
      a.f returns new V("hoge") 
      a.f match { 
       case V("hoge") => success 
       case _ => failure 
      } 
     } 
    } 
} 

questo viene a mancare con:

V cannot be returned by f() 
f() should return String 

I trovato tipo di soluzione (basata su cui ho fornito sopra frammento) usando pennarello interfaccia/caratteristica: https://gist.github.com/mtgto/9251779

ma questo non è alcuna soluzione per me, tipo quindi cambia a restituire (a causa di scherno/test problema di libreria).

Chiunque ha visto questo prima e sa come interrompere tale funzione?

risposta

5

ho trovato un modo di sradicamento questa funzione - usando doReturn originale Mockito con tipo sottostante di AnyVal (String in questo caso) anziché AnyVal stessa, così:

org.mockito.Mockito.doReturn("hoge").when(a).f 

anziché:

a.f returns new V("hoge") 
+0

Ho provato alcune cose e non penso che ci sia un modo migliore per quello che stai facendo. 'doReturn' non è tipometecked mentre' returns' è quindi è per questo che funziona. Un altro problema nell'interopase Scala/Java. libro di problemi, credo. – Eric