我在Eclipse 3.7上运行JUnit 4.10。我正在做数据库测试:使用的数据库是SQLite3与sqlitejdbc。我尝试在Windows和Linux上运行测试,这里是我的观察结果:SQLite数据库在JUnit测试中锁定
- 在Windows 7 x64上,测试运行速度更快(每次测试约0.6s)。我确实收到有关“无法打开数据库文件”的错误。它们似乎是间歇性的(有时在下次运行失败时,相同的测试可能会通过一次)
- 在Ubuntu 11.10 x64上,测试速度很慢(每次测试约3秒)。我收到有关“数据库锁定”的错误。与Windows的间歇性错误不同,在这里,错误似乎发生在同一个测试/文件上,一旦发生锁定错误,所有后续测试失败。
UPDATE
你可以找到测试的代码上GitHub。我想这个问题可能是与我的@BeforeClass
,@Before
和测试套件是如何设置的
我有一个像
@RunWith(Suite.class)
@SuiteClasses({ DataAccessTests.class, SimpleQueryTests.class, ... })
public class DataAccessTestSuite {
@BeforeClass
public static void setUpDatabase() throws SQLException, ClassNotFoundException {
DataAccess.setEnvironment(DataAccess.DATABASE_TESTING);
Connection conn = DataAccess.getConn();
// truncate tables: simply DELETE statements
truncateTables(conn);
// insert test data, INSERT statements
insertTestData(conn);
}
然后在我的测试类测试套件我有一个@Before
也呼吁建立。
public class EventsDataAccessTests {
@Before
public void setup() throws SQLException, ClassNotFoundException {
DataAccessTestSuite.setUpDatabase();
}
我在想,如果我不想调用整个套件,我仍然想要设置我的数据库。我认为问题与此有关,但我不确定它究竟是如何造成问题的。看起来,即使我打电话给个人测试班,我的套件设置运行?或者如果不是,如果测试未从套件中调用,我如何确保它运行一次?
- 旧帖子删除 -
你同时运行单元测试吗? – kan 2012-04-05 10:42:19
我使用Eclipse运行测试,没有多个eclipse实例或类似的东西,所以测试不应该同时运行? – 2012-04-05 11:06:45
如果我有类似'@SuiteClasses({DataAccessTests.class,SimpleQueryTests.class,SimpleInsertTests.class,SimpleUpdateTests.class,...})'个别测试类是否同时运行? – 2012-04-05 11:08:53