2012-03-10 22 views
1

我在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(); 
} 

我在想,如果我不想調用整個套件,我仍然想要設置我的數據庫。我認爲問題與此有關,但我不確定它究竟是如何造成問題的。看起來,即使我打電話給個人測試班,我的套件設置運行?或者如果不是,如果測試未從套件中調用,我如何確保它運行一次?

- 舊帖子刪除 -

+0

你同時運行單元測試嗎? – kan 2012-04-05 10:42:19

+0

我使用Eclipse運行測試,沒有多個eclipse實例或類似的東西,所以測試不應該同時運行? – 2012-04-05 11:06:45

+0

如果我有類似'@SuiteClasses({DataAccessTests.class,SimpleQueryTests.class,SimpleInsertTests.class,SimpleUpdateTests.class,...})'個別測試類是否同時運行? – 2012-04-05 11:08:53

回答

2

您需要確保在同一時間不超過一個線程試圖對SQLite數據庫上的寫鎖。對於我所說的意思的概述,請閱讀

(5) Can multiple applications or multiple instances of the same application access a single database file at the same time?

所以,當你說:

如果我本身運行測試,它傳遞。當試圖運行整個 套件失敗

我認爲這是公平的假設,而另一個人試圖獲取其寫鎖定不受可能的連接對象釋放。 因此,即使不使用線程,在另一個測試創建另一個連接對象之前,也許GC不會訪問先前測試的連接對象。

也許你可以發佈一些這些測試,以幫助更好地瞭解可能會出現什麼問題。

UPDATE:

你不應該關閉此連接?:

public static void tearDownDatabase() throws SQLException, ClassNotFoundException { 
    Connection conn = DataAccess.getConn(); 
    truncateTables(conn); 
} 
+0

+1。偶爾,我們都會無意中造成併發問題。 :) – MrGomez 2012-04-08 00:50:07