2

Spring/Hibernate による DAO クラス マネージャーの TestNG を使用した統合テストがあります。以下に示すように。1 つのテストでデータを挿入し、次に fetch メソッドをテストするためだけに別のテストを実行しようとしていました。そこで、TestNG が提供する dependsOn を使用しました。しかし、問題は、TransactionConfiguration アノテーションで defaultRollBack = true を指定したため、最初のテストが終了するとトランザクションがロールバックされることです。私の2番目のテストは失敗します。クラス内のすべてのテストが完了した後、それを停止してロールバックする方法はありますか?

import static org.testng.Assert.*;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.testng.annotations.Test;

import com.worksheet.State;


@ContextConfiguration("classpath*:spring-context-test.xml")
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional(propagation = Propagation.REQUIRES_NEW)
public class StateDAOTest extends AbstractTransactionalTestNGSpringContextTests{

    @Autowired
    private StateDAO stateDAO;

    @Test
    public void saveUnknownState(){
        State state = new State("Unknown", "UKN");
        stateDAO.saveState(state);
        assertTrue(state.getId() > 0);
    }

    @Test(dependsOnMethods = {"saveUnknownState"})
    public void fetchUnknownState(){
        State state = stateDAO.getStateByAbbreviation("UKN");
        assertNotNull(state);
    }
}
4

0 に答える 0