2017-09-06 15 views
1

以下は私のコードデザインです。私は、それのためのテストケースを書く方法、指導が必要です。以下はJavaで保護されたメソッドのモックオブジェクト

abstract class X 
{ 
    public void xyz() 
    { 
     A a = getA(); 
     callMe(a); 
    } 
    private A getA() 
    { 
      //do some stuff 
      return a; 
    } 
    protected void callMe(); 
} 

子クラスされています。今、私は子クラスYのためのユニットテストケースを書いています

class Y extends X 
{ 
    @Autowired 
    MyClass myClass; 

    protected void callMe(A a) 
    { 
     B b = provideB(); 
     C c = b.getC(); 
     c.setValue(myClass.getSomeValue()); 
    } 
    private B provideB() 
    { 
     //every child class has its own way of providing this object 
     return b; 
    }  
} 

、だから私はテストのためのxyzメソッドを呼び出しています。私はMyClassオブジェクトを私の外部依存関係として模倣する必要があることを知っています。だから私はそれを嘲笑した。しかし、私はAを模倣すべきか、それに続いてBとCを混乱させるべきか、それとも何らかの形で保護された/私的な方法で作成されるので混乱しています。 いずれのリードも高く評価されます。

答えて

1

私は個人的にクラスのパブリックインターフェイスのみをテストします。だから私はxyz()に電話をかけ、それが契約を尊重することを確認します。 A、B、Cは注入されていないので、それらは公開インターフェースの一部ではなく、私はそれらを嘲笑しません。

あなたが注射する必要があるかどうかについて今すぐ。どのような種類のオブジェクトA、B、Cがあるかによって異なります。もしそれらが小さく、ダムのオブジェクト(例えば値オブジェクト)ならば、あなたはprivate/protectedメソッドでそれらを作成するだけです。それらが幾分大きなオブジェクトであり、特にいつかそれらの異なる実装を使用したいと思われる場合は、それらを注入してモックする必要があります。 Xクラスでこれらのオブジェクトの有効期間を制御する場合は、代わりにFactoryを注入し、newの呼び出しを工場呼び出しに置き換えることができます。

関連する問題