2012-01-19 7 views
2

1つのテストメソッド内で、1つのクラスの擬似および非モックされたインスタンスを作成するにはどうすればよいですか?1つのテストメソッド内で、1つのクラスの擬似および非擬似インスタンスを作成するにはどうすればよいですか?

「lastContact」属性が5分より古い場合、「Entry」は期限切れになる可能性があります。私はそのようなEntryオブジェクトを作成するためにMockを使用します:

@Test 
public void entryOlderThanFiveMinutesIsExpired() { 

    new MockUp<Entry>() { 
     @Mock 
     public Date getLastContact() { 
      return new Date(10000L); // date in the past 
     } 
    }; 
    Entry expiredEntry = new Entry(); 
    assertThat(expiredEntry.isExpired(), is(true)); 
} 

これは問題なく動作します。 次のテストでは、「期限切れ」と「期限切れ」以外のエントリが必要です(両方ともEntryListに追加され、「パージ()」の後に期限切れでないエントリのみ残る必要があります)。

@Test 
public void test() { 

    Entry unexpiredEntry = new Entry(); // this should not be mocked 

    new MockUp<Entry>() { 
     @Mock(invocations = 1) 
     public Date getLastContact() { 
      return new Date(10000L); // date in the past 
     } 
    }; 
    Entry expiredEntry = new Entry(); 
    assertThat(expiredEntry.isExpired(), is(true)); 
    assertThat(unexpiredEntry.isExpired(), is(false)); 
} 

は、これは失敗します。 しかしモックをセットアップするには、そのクラスのようにすべてのインスタンスが嘲笑され、クラス全体を変更します。私はモックを設定するいくつかの方法を試しましたが、私はそれを得ませんでした。 この問題を解決するにはどうすればよいですか?

はあなたがmockit.Invocationパラメータを追加し、モックメソッドreentrantをすることによってそれを行うことができ、あなたに

答えて

3

ありがとうございます。しかし、Expectations APIでは、Entryの他のインスタンスに影響を与えない "@Injectable Entry expiredEntry"模擬フィールド/パラメータを宣言できます。

関連する問題