2016-11-09 14 views
0

私は関数をテストしようとしていますが、私がテストしている関数は、スタブしたいtraits関数を呼び出します。私はオブジェクトをモックすることができないので、ScalaMockを使ってこの関数をスタブすることはできません。ScalaMockオブジェクトの継承されたTrait関数ScalaTest

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

この特性は、commonTraitを実装し、共通戻りの特定のサブタイプを返す多くのオブジェクトによって拡張されます。

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

従って私は今、しかし私はそのためcommonFunctionスタブすることはできません、OBオブジェクトをモックに見えることはできませんob.testMeテストしようとしています。

これは私のアーキテクチャによるものですか?または、スケマockでオブジェクトをモックし、スケートを使用することは可能ですか?

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

これはコンパイルされません。

+0

commonFunctionがあなたの例でtestMeの外にある場合、同じ問題がありますか? – Barry

答えて

0

モック[X]はXのサブクラスなので、ScalaMockでオブジェクトをモックすることはできません。スカラはオブジェクトのサブクラスを許可していません。

このcommonFunctionとのコラボレーションをテストする必要がある場合は、継承が難しくなります。私はこれをDependency Injectionで設計することを検討します。

関連する問題