我有一个 JUnit 测试,我在其中使用Spring Test DBUnit和Spring 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());
}
}