2016-11-09 5 views
0

Ich versuche eine Funktion zu testen, aber die Funktion, die ich gerade teste, ruft die Merkmalfunktion auf, die ich stubben möchte. Ich kann nicht scheinen, diese Funktion mit ScalaMock zu stubbern, da ich das Objekt nicht verspotten kann.ScalaMock Vererbte Eigenschaft des Objekts ScalaTest

trait[A<:CommonReturn] commonTrait[A] { 
    def commonFunction(s:String):(String,String) = { 
     ("Hello","World") 
    } 
    def testMe(s:String) : A 
} 

Diese Eigenschaft erweitert wird dann durch viele Objekte jeder commonTrait Implementierung und ihre spezifischen Unterart der gemeinsamen Rückkehr zurück.

object ob extends commonTrait[ConcreteType] { 
    override def testMe(s:String){ 
     val(x,y) = commonFunction(s) 
     val z = "unique logic" 
     ConcreteType(x,y,z) 
    } 
} 

ich deshalb jetzt versuchen jedoch zu testen ob.testMe ich nicht ob Objekt zu verspotten scheinen kann, kann deshalb nicht die commonFunction Stummel.

Liegt das an meiner Architektur? Oder ist es möglich, ein Objekt mit Scalamock zu verspotten und Scalatest zu benutzen?

val mocked = mock[ob] 
(mocked.commonFunction _).expect(*).returning("test","test") 

Dies wird nicht kompiliert.

+0

hätten Sie das gleiche Problem, wenn commonFunction in Ihrem Beispiel außerhalb von testMe war? – Barry

Antwort

0

Sie können keine Objekte mit ScalaMock mocksen, da ein Mock [X] eine Unterklasse von X ist. Scala erlaubt keine Unterklassen von Objekten.

Wenn Sie die Zusammenarbeit mit diesem commonFunction testen müssen, macht es die Vererbung ziemlich schwierig. Ich würde überlegen, dies stattdessen mit Dependency Injection zu entwerfen.

Verwandte Themen