4

すべてのJUnitテストメソッドの前に、いくつかのコードを実行する必要があります。このコードを実行するには、SpringTestクラスAbstractTestExecutionListenerとその子TransactionContextTestExecutionListenerを使用します。

これはコードです:

public class TransactionContextTestExecutionListener extends AbstractTestExecutionListener{

    private static final Logger logger = Logger.getLogger(TransactionContextTestExecutionListener.class);


    @Override
    public void beforeTestMethod(TestContext testContext) throws Exception {
        Object ctx = testContext.getApplicationContext().getBean(Context.class);
}

私のJUnitクラスは次のようになります。

@ContextConfiguration(locations = "classpath:/META-INF/spring-test/tests-context.xml")
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners(TransactionContextTestExecutionListener.class)
@Transactional
public class SelectQueryBuilderTest {}

問題は、beforeTestMethodメソッドが最初に実行されたテストメソッドの前にのみ呼び出されることです。残りのすべての前に呼び出されるわけではありません。

設定に問題がありますか?何か案が?

ありがとう

4

2 に答える 2

13

を使用して JUnit クラスを実行しているSpringJUnit4ClassRunnerため、JUnit 4 アノテーションを使用できます。

@Before
public void multipleInit() {
    // Called before each method annotated with @Test
    ...
}

@BeforeClass
public static void initAll() {
    // Called once per class, before any method annotated with @Test is called
    ...
}
于 2012-10-15T12:07:22.923 に答える
8

@Beforeを試すことをお勧めします。たとえば、テスト用の基本クラスを作成することを検討してください。

@ContextConfiguration(locations = "classpath:/META-INF/spring-test/tests-context.xml") 
@RunWith(SpringJUnit4ClassRunner.class) 
@TestExecutionListeners(TransactionContextTestExecutionListener.class) 
@Transactional 
public class BaseQueryBuilderTest {
    @Autowired
    private ApplicationContext applicationContext;
    protected Context context;

    @Before
    public void setUp() {
        context = applicationContext.getBean(Context.class);
    }
} 

これで、次のようにテスト実装を記述できます。

public class SelectQueryBuilderTest extends BaseQueryBuilderTest {
    @Test
    public void test() {
        // Use context
    }
}

このアプローチの利点の 1 つは、多くのメタデータが基本クラスにカプセル化されるため、実際のすべてのテスト クラスでメタデータを複製する必要がなくなることです。

于 2012-10-15T12:07:11.067 に答える