2012-04-10 15 views
1

ユニットテストで呼び出すプライベートメソッドの順序を確認:)私は以下のクラスを持っている

class MyClass { 

    public void doIt() { 
    methodOne(); 
    methodTwo(); 
    methodThree(); 
    } 

    private void methodOne() { 
    // ... 
    } 

    // rest of methods similar... 

} 

私の意図は、私がのdoItを(起動時にいることを確認することである、方法metodOne()、methodTwo()とmethodThree()その順番で呼び出されます。

私は嘲笑のためにmockitoを使用しています。このシナリオをどのようにテストできるか誰にでも分かりますか?

答えて

9

この人になることは嫌いですが、単にこれをテストしないでください。実装ではなく、出力、副作用、結果をテストします。

実際に正しい順序を確保したい場合は、これらのメソッドを別々のクラスに抽出し、それらをモックします。

+0

正気の声が話されました。大きな最初のパラグラフ。テスト中に結果に集中すれば、実装自体に集中するよりもずっと良い結果が得られます。 –

+0

この特定のケースでは、私は実際に状態をテストしたくありません。私は自分のメソッド(http://martinfowler.com/articles/mocksArentStubs.html)の動作をテストしたい –

+0

@leftyこれらの相互作用が起こるかどうかをテストすると、あなたが偽装することができます。 – Brice

3

あなたのプライベートな方法が...よく...プライベートである限り、それらをテストしないでください。実装の詳細です。彼らはあなたのクラスの契約を変更することなくリファクタリングすることができます。パブリックメソッドの正しい結果をテストします。

+0

私のパブリックメソッドは単なるinit()メソッドです。何も返さず、クラスの状態を設定するだけです。私がしたいのは、初期化された状態が正しいことを確認することです。しかし、私は自分が所有していないクラスから拡張しているので、init()から内部的に使用されるメソッドのいくつかをスタブしなければなりません(そうでなければ、単に実行されません)。 –

+0

IMHOテストは、すべてがまだ動作しているという自信を持ってコードをリファクタリングするのに役立ちます。したがって、正しい初期化を確認したい場合はそれを確認してください。 (これは従来のコードではあまり意味がないかもしれません)。結果を確認するよりもむしろ何らかの方法を主張することで勝ったものはないと思います。 – DerMike

関連する問題