2013-07-15 93 views
1

我在一個使用JDBC連接到h2數據庫的maven項目中編寫了幾個JUnit測試類。 我有8個測試類。使用h2數據庫的JUnit測試表現奇怪

  • 當我的IntelliJ運行All tests,我有一個JDBC錯誤(在最後的測試類:WorkspaceTest.java):

org.h2.jdbc.JdbcSQLException: Table "WORKSPACE" not found; SQL statement:

(如果你想完全蹤跡,我會說,但它有點長)。

note:所有7個其他測試類都通過了。

  • 當我的IntelliJ單獨運行每個測試,他們都通過,由1 1

  • 當我運行mvn clean install測試,我得到一個構建失敗,與錯誤(在最後測試類:OWSContextTest.java):

update(org.orbisgis.server.mapcatalog.OWSContextTest): Table "FOLDER" not found; SQL statement:

note:所有其他7個測試類都通過了。

  • 當我用mvn(mvn -Dtest=OWSContextTest test)單獨運行此測試時,測試通過。

類都應該是獨立的,在他們每個人我有一個@BeforeClass而下降數據庫中的測試,然後創建它,最後填充它,並且@AfterClass這降低了數據庫。

如果您需要其他任何東西,我會爲它編輯。 我真的不知道這個行爲的原因。

感謝您的幫助。

編輯:我剛剛在IntelliJ上運行了All tests約10次,並且它工作了大約6次,並且失敗了4次相同的錯誤。不知道我是否可以真正相信intelliJ測試機制。我試了更多的東西: 我跑了7我的8個測試類,所有8個(我一起跑了1 2 3 4 5 6 7,然後2 3 4 5 6 7 8,然後...)他們都通過了(所有7個組合中的8個)

+0

如果您收到「找不到表格」錯誤,則很有可能數據庫爲空(不包含表格和數據)。什麼是您的數據庫URL?如果它是內存數據庫,則需要確保數據庫已初始化(創建表)。 –

+0

數據庫URL是jdbc:h2:./target/testdb。 我明白,問題來自表未創建,但我不明白爲什麼他們沒有創建。正如我所說,如果我運行測試1 1,他們都通過。我只是試圖運行除一個之外的所有(所有8個可能性),並且每次都通過。 – Saffron

+0

@Thomas Mueller是否有可能因爲連續數次連接到我的數據庫,H2會阻塞最後一個? – Saffron

回答

0

如果您使用@BeforeClass刪除數據庫並重新創建它,它會工作嗎?也許一個測試的@AfterClass在另一個測試的@BeforeClass之後執行,因爲它需要比預期更多的時間。

+0

我不明白你想說什麼。 我已經做了@BeforeClass放置並重新創建。 – Saffron

+0

@Saffron但是你說過「和一個放下數據庫的AfterClass」。我是說,如果你刪除AfterClass,它是否工作? – Hippoom

+0

對不起。 我嘗試沒有所有的@AfterClass,但我得到相同的錯誤,所以它不是一個同步問題。 – Saffron