2

Springでは、オブジェクトに対して一連のテストメソッドを実行するが、新しいテストメソッドを呼び出す前にオブジェクトをリセット/再注入する最良の方法は何ですか? 以下のコードで実行しようとしましたが、現在のロジックでは、オブジェクトが作成され、一度だけ挿入されます..

package com.bidtracker;

import org.junit.Test;
import org.junit.runner.RunWith;

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.is;

import com.bidtracker.iface.BidTracker;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class BidTrackerTest {

    @Autowired
    BidTracker tracker;

    @Test
    public void shouldReturnHighestBidAmount1(){

    tracker.bidOnItem("itemB", "user1", 105);
    assertThat(tracker.getHighestBid("itemB").getAmount(),is(Integer.valueOf(105)));
    }

    @Test
    public void shouldReturnHighestBidAmount2(){

    tracker.bidOnItem("itemB", "user1", 39); 
    tracker.bidOnItem("itemB", "user1", 50); 

    assertThat(tracker.getHighestBid("itemB").getAmount(),is(Integer.valueOf(50)));

    }
}
4

2 に答える 2

1

ここでの問題は、Spring テストのサポートがデフォルトでアプリケーション コンテキストをキャッシュし、キーの要素 (コンテキスト名、アクティブなプロファイルなど) が一致する場合、キャッシュされたコンテキストを再利用することです。Spring にキャッシュからコンテキストを削除するように依頼するには、テストに@DirtiesContextアノテーションを付けます (メソッド レベルまたはテスト クラス レベルで)。

于 2013-01-23T00:58:26.123 に答える
1

JUnitには@Before注釈があり、それを使用して各テストの前に初期化を行うことができます。

しかし、私はあなたのケースに興味があります。ここに@Testドキュメントがあります:

Test アノテーションは、それが付加されている public void メソッドをテスト ケースとして実行できることを JUnit に伝えます。メソッドを実行するために、JUnit はまずクラスの新しいインスタンスを構築し、次にアノテーション付きメソッドを呼び出します。テストによってスローされた例外は、JUnit によって失敗として報告されます。例外がスローされない場合、テストは成功したと見なされます。

問題は、Bean がシングルトンであることだと思います。実際には再度注入されますが、変更されている場合は同じものを使用しています。@DirtiesContextアノテーションを試すことができます。

于 2013-01-23T00:45:07.760 に答える