2011-07-21 20 views
6

テスト駆動開発の初心者として、私はちょうど問題に遭遇しました。私のテストクラスは次のように始まります:独立したJUnitテストスプリング@Autowired

@RunWith(SpringJUnit4ClassRunner.class) 
@Transactional 
@DirtiesContext 
@ContextConfiguration(locations = {"/web-test.xml"}) 
public class XXTest { 

    @Autowired 
    XX xx; 

    @Autowired 
    HibernateTemplate template; 

    @Test 
    public void testSetGetXXValue() throws Exception { 
    final Map<String, YY> profilMap = new HashMap<String, YY>(2); 
    profilMap.put("1", new YY()); 
    profilMap.put("2", new YY()); 

    simpleCockpit.setValues(profilMap); 

    assertEquals(profilMap, simpleCockpit.getValues()); 
    } 

ご覧のとおり、最初のテストメソッドは、autowired XXクラスを変更します。これは、autowired-valueを持つXXに依存する、以下のすべてのテストメソッドに影響します。

ゲッターとセッターをXXからテストするにはどうしたらいいですか?XXに残りのテストメソッドの自動値があることを確認しますか?

思想:

  • は、試験方法の終了時に正しい値をリセットします。ゲッター/セッターが機能していない場合、これは機能しません。
  • 最初のテストメソッドをテストクラスの最後に配置します。これはテストが実行順序に依存するためです。
  • XXのゲッター/セッターをテストしないでください。 getter/setterはすべてのメソッドのようにテストする必要があるため、不正です。

お返事ありがとうございます!これは簡単な解決策を持っているかなり確信してI`m ... :)

EDIT:質問単体テストゲッター/セッターか否かについては、私は、主にhttp://www.sundog.net/sunblog/posts/should-we-test-getters-and-setters/でstatetの理由でそうすることを決めました。

答えて

7

スプリングマネージドBeanを変更する場合は、@DirtiesContextアノテーションを使用できます。このアノテーションは、テストクラスとテストメソッドに置くことができます!

@DirtiesContext

Javaのドキュメントから:

:{@link org.springframework.context.ApplicationContextのApplicationContext}テストに関連付けられ が ダーティあり、閉鎖されるべきであることを示す

テスト注釈

  • メソッドレベルで宣言されたときに、それぞれのテストメソッドの後に、メソッドレベルで宣言されたとき、
  • {@link ClassModeに設定クラスモードとクラスレベルで を宣言するとき、現在のテストクラス後
  • {@link ClassMode#AFTER_EACH_TEST_METHOD AFTER_EACH_TEST_METHOD}に設定クラスモードとクラス レベルで宣言urrent試験クラス#AFTER_CLASS AFTER_CLASS}

    とにも(私の理解への)テスト駆動開発における

:最低限の複雑さを持っているもののためexpliciteテストを書きます。だから私はgetterとsetterのexpliciteテストを書くことはありません。私は通常、いくつかの機能をチェックするテストを持っています。このゲッターとセッターが必要なときにこのゲッターとセッターを書くようにしてください(そして、この時点で)、私は暗黙のうちに機能しています。

あなたのケースでは、特に

newで作成した「通常の」オブジェクトを使用していない理由はなぜあなたは、春の豆を使用してください。ほとんどの場合、単純なテストのためにテストに役立つ限り、「通常の」クラスを使用します。私はSpring Beansを "より大きい"テストにも使用します。

+0

@DirtiesContextは私が探していたものでした。ありがとう。 データベースからテストデータを提供するDAOであるため、このBeanをオートワイヤしたいと思っています。 – Steven

関連する問題