2

我有一个 JUnit 测试,我在其中使用Spring Test DBUnitSpring declarative transaction management。如果我用@Transactional(它将利用@BeforeTransactional 来验证数据库状态)和@DatabaseSetup(将数据库状态设置为我想要的)标记一个测试方法,哪个优先?是先设置数据库,然后@BeforeTransactional 会检查它,还是会在设置后进行检查?这是一些代码:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = PersonServiceConfiguration.class)
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class,
        DirtiesContextTestExecutionListener.class,
        TransactionalTestExecutionListener.class })
public class PersonServiceTransactionalIT {

    @Autowired
    private PersonManagementService pms;

    @BeforeTransaction
    public void beforeTransaction() {

        checkDatabaseState();
    }

    @AfterTransaction
    public void afterTransaction() {

        checkDatabaseState();
    }

    @Test
    @Transactional
    @DatabaseSetup("/test_data_start.xml")
    public void testCreateValid() {

        Person expected = new Person(6l, "six", "created");
        Person actual = pms.save(expected);
        assertEquals("Person objects not equal", expected, actual);
    }

    private void checkDatabaseState() {

        List<Person> pl = pms.findAll();
        assertEquals("Size of database not as expected", 5, pl.size());
    }
}
4

0 回答 0