質問: RootJob.getName(); AssertThat(result, is("任意の文字")); } ``` いろいろなサンプルを見ると、まずAuthorのモックを作り、 それをどうにかしてRootJobにセットすることでモックの動作を実現しているように見えました。 しかし、セットする手段がない場合はどのようにすればよいのでしょうか。 別言語ですが、RSpecの場合はallow~receive~and_returnなどでテスト前に定義したモック(スタブ)は 以降の処理でプロダクションコードの中身を上書きするように振舞ってくれます。 実際に行いたいことではなくサンプルで提示したので、不整合な内容となっているかもですが、 可否だけでも知りたく、質問させて頂きました。 よろしくお願いいたします。
回答: > > 明示的にモックのオブジェクトをsetせずに振る舞いを変更することは可能でしょうか > > > 明示的にsetしないと振る舞いを変更することはできません。 > > あるクラスAのメソッド内で呼ばれるクラスBのモックを作り、セットすることは可能なのでしょうか。 > > > 可能です。できなければかなりの数のテストができないことになります。 インスタンスの生成についても同様です。(こういう場合はスタブといいますね。) http://taka-2.hatenablog.jp/entry/20150508/p1 > > しかし、セットする手段がない場合はどのようにすればよいのでしょうか。 > > > セットする手段がないとはどのようなケースを想定しているでしょうか。 サンプルの解説で分かりづらいかもしれませんが、 `RootJob.getName()`のテストをする時は`Author`クラスはモック化しなくてよいはずです。 `new ProcExecute()`をスタブ化するか、`procExecute.main()`をモック化することでテスト可能です。