私はその問題が一例で最もよく説明されていると思います。"tell、do not ask"フォロワークラスの単体テスト方法は?
public class MyService {
private OtherService theOther;
public void setTheOther(OtherService srv) { theOther = srv; }
public void myBusinessStuffFor(int id) {
theOther.applyToAllWith(id, new OtherService.Action() {
public void apply(Object whatever) {
doTheHardBusinessStuffWith(whatever);
}
}
}
private void doTheHardBusinessStuffWith(Object whatever) {
// here the business stuff provided by MyService
}
}
public interface OtherService {
void applyToAllWith(int id, Action action);
public interface Action {
void applyOn(Object whatever);
}
}
私はこのパターンが好きです。非常に結束しているからです。アクションインタフェースは、サービスとペアになっています。ビジネスロジックは多くのクラスで混乱することはありません。サブクラスはアクションにデータを提供するだけであり、ビジー状態である必要はありません。私はここからそれを採用した(http://jamesladdcode.com/?p=12)。問題は、 "doTheHardBusinessStuffWith(Object whatever)"メソッドの動作をテストするための良いソリューションが見つからないということです。モックではビジネスメソッドがどのように呼び出されるか気にする必要があります。しかし、どうすればいいのですか?私はmockitoを使って既にArgumentCaptureで試してみました。しかし、それはArgumentCaptureを悪用したために正しく感じられません。
クラスMyService.myBusinessStuffFor(int id)で使用されているパターンが名前を持っているかどうかを知りたいです(戦略パターンですか)? しかし私の主な質問は、このコードをOtherServiceのモックでテスト可能にする方法です。
これは私が探していたものです。誰かだけがこのパターンの名前を教えてくれたら、私は完全に満足するでしょう。 –
申し訳ありませんが、私はものの名前を知っているとあまりよくありません。あなたのコードをテストする常識的な方法であるように思えます。私はこの特定のパターンの名前を知らない。 –
コマンドパターン:http://en.wikipedia.org/wiki/Command_pattern –