2016-07-17 3 views
0

私はユニットテスト他の非仮想関数を呼び出すテスト関数をどのようにユニット化するのですか?

public class MyClass { 

    public DataObj FuncX (int input1, int input2) { 

     if(input1 < 0 && input2 > 0){ 
      return Func01(); 
     } 
     else if(input1 < 2 && input2 < 0) { 
      return Func02(); 
     } 
     .... 
     return Func0N(); 
    } 
} 

私はすでにFunc01()Func02()のような機能のための多くのユニットテストを持っているいくつかの機能がありますが、私はどのようにユニットテストFuncX()を知りません。

(注:Func01()およびその他の機能は、仮想ではありません)

+0

***あなたの機能を仮想にすることができます。次に、funcXで、適切な模擬/仮想関数が、それが別のものに対して呼び出される理由に関するロジックに基づいて呼び出されたかどうかをテストします。 – Kritner

答えて

0

だけメソッド内private methods、あなたができない、実際にテスト機能をテストするように。関数Yの結果Xは、その内部で何が起こっているかに関わらず、結果Xを持つことを期待する必要があります。

テストしている関数と、すべてが期待通りに機能することを保証する関数との間に暗黙の約束があります。内部機能が正常に機能しない場合、外部機能は動作しませんが、その場合はテスト失敗の理由がテストの対象になるべきではありません。

内部関数のテストを作成し、それを呼び出すテストを作成すると、テストの失敗の原因を簡単に見つけることができます。

+0

私の機能はすべてパブリックです(しかし、バーチャルではありません)。 – Zach

+0

すべてをテストします。とにかく仮想関数をテストすることは不可能です(仮想関数なので、オーバーライドされたときにのみ呼び出すことはできません)、具体的な関数をテストします。 – Jezor

関連する問題