我有大约10个将自动执行的JUnit。我想在每个数据库中重置数据库。我有这段代码:
//@Transactional
public class TestMediaObjectService extends AbstractDataAccessTest{
//This method reset the database, emptying the tables
@Test
public void testCreateDataBase() throws Exception {
TestDatabaseCreation creation = new TestDatabaseCreation();
creation.resetDatabase();
}
//This is one of the methods.
@Test
public void testStoreMediaObject() throws Exception {
//......
}
当我使用我在方法testCreateDataBase
中使用的相同脚本手动重置数据库时,在此之后运行此测试(没有该方法),将自动创建表。但是,如果我按照上面粘贴的方式运行代码,则不会创建表,因此我收到此错误:
引起:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表'one_table'不存在
在测试中运行其他方法之前,我怎样才能运行该方法?注释@Transactional
已删除,但错误仍然存在。
答案 0 :(得分:3)
通常您不需要手动重置数据库,因为JUNIT会在每次测试之前为您执行此操作。使用这些注释:
@TransactionConfiguration(defaultRollback = true)
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
Junit将在运行后回滚测试中完成的所有事务。您只需要一个现有的空数据库。如果使用hibernate来管理实体,则甚至不需要使用表。
如果您想手动执行此操作,请在设置方法中使用@Before
注释:
@Before
public void init() {
createTables();
}
这将在每次测试之前运行。
如果要为类中的所有测试设置一次数据库表,请使用@BeforeClass
。但通常这不是最佳实践,因为每个测试都应该独立于任何其他测试。