2011-09-12 15 views
2

現在の日付を取得するヘルパークラスが必要です。私は将来のテストの問題(システム時間とは異なる時間を返す必要があるかもしれない)のためにコードにnew Date()があるのを避けたいと思います。テストでの問題を防ぐためにJodaTimeを使用することはできません。java.util.Dateのモック可能ヘルパークラス

私はこのようなヘルパーを考えていた:

public interface DateHelper { 

    /** 
    * Returns the current date. 
    */ 
    Date now(); 

} 

しかし、どのように、私はクライアントにこのインターフェースのモックを供給することができますか?私は考えることができる 唯一の解決策はこれです:

public ClientOfDateHelper { 

    private DateHelper dateHelper; 

    // no-arg constructor that instantiates a standard implementation of DateHelper 
    public ClientOfDateHelper() { 
     this.dateHelper = new DefaultDateHelper(); 
    } 

    // constructor that can be used to pass mock to the client 
    public ClientOfDateHelper(DateHelper suppliedDateHelper) { 
     this.dateHelper = suppliedDateHelper; 
    } 

    public void foo() { 
     Date today = dateHelper.now(); 
     // do some work that requires today's date 
    } 

} 

DateHelperを使用するために以下のコードを必要とし、よりエレガントな解決策はあります、まだそれはモックを使用したことができますか?

+1

依存関係注入または依存関係検索(クライアントが一部の中央サービス/クラスから日付ヘルパーをリクエストします)はどうですか? – Thomas

答えて

0

テストの容易さは、依存性注入の利点の1つです。 Springのようなフレームワークを使用すると、依存関係を外部から設定することができます。したがって、あなたの実装はあなたの春の設定で実行され、あなたのユニットテストは、コンストラクタまたはプロパティセッターを通して提供されるモックで実行されます。これは上記の2つのconstuctorの必要性を排除します。あなたはDateHelperを受け入れるものを使用します。

関連する問題