1

ご挨拶。
Roo で生成された Web アプリがあります。コントローラーをテストしたい。spring-test-3.2 を使用しています。
STS 3.2 を使用します。
テスト用に埋め込まれた Derby。
コントローラー テストが 2 つの統合テストの間に挟まれると、テスト スイートが失敗し、その後の統合テストが中断されます。コントローラーのテストを @Ignore すると、スイートは正常に動作します。この統合テストには、Roo が生成したテスト メソッドと私自身のテスト メソッドの両方があります。
私はたくさん検索しましたが、この動作の理由はわかりません。トランザクションが正しくロールバックされていないのではないかと疑っていましたが、問題ないようです (ログは問題ありません)。空のコントローラー テスト メソッドが 1 つだけあります。何らかの理由で @ContextConfiguration が問題だと思います...

前の統合テスト:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:/META-INF/spring /applicationContext*.xml")
@Transactional
public class CompanyServiceImplTest {

コントローラ テスト:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(value = {
    "file:src/main/resources/META-INF/sprin/applicationContext.xml",
    "file:src/main/webapp/WEB-INF/spring/webmvc-config.xml" })
@Transactional

後の統合テスト(これは壊れます)

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:/META-INF/spring/applicationContext*.xml")
@Transactional
@RooIntegrationTest(entity = Status.class)
public class StatusIntegrationTest {  

任意のポインタに感謝します...

--- チェリオ アトゥール

4

1 に答える 1

1

これはおそらくhttps://jira.springsource.org/browse/SPR-6121が原因です

私にとってうまくいった回避策は、すべての単体テストに @WebAppConfiguration を追加し、それらがすべて同じ @ContextConfiguration を持つようにすることで、すべての単体テストが同じアプリケーション コンテキストを使用するようにすることでした。

Spring Roo を使用しているようです。既存のすべての単体テストを編集しないようにするには、テスト用に webmvc-config.xml のコピーを作成し、applicationContext*.xml パターンに一致するように名前を変更/移動します。

@WebAppConfiguration アノテーションを既存のテストに追加するには、アスペクトを使用します。

package com.foo.bar;

import org.springframework.test.context.web.WebAppConfiguration;

privileged aspect WebAppConfigurationAspect {
   declare @type: com.foo.bar..*Test: @WebAppConfiguration;
}
于 2013-05-10T12:52:54.733 に答える