2014-09-01 45 views
2

這個問題可以看作是眼前這個C++問題的Java版本:Unit test compile-time error測試在Java預計編譯時錯誤

我正在寫一些實用工具類,亂用在Java泛型和事情變得怪異足以讓我發現自己希望我知道如何爲應該導致編譯器錯誤的代碼編寫單元測試。我知道如何僅在拋出期望的異常時進行單元測試。不知道如何才能通過只有當我得到預期的錯誤。這可能嗎?如果是這樣,怎麼樣?有沒有一個典型的做法?有沒有jUnit的方式?

一個例子是使用一種方法(可以說,一個執行一個演員)以一種應該會導致錯誤的方式。我想要一個只有在調用該方法的代碼產生錯誤時纔會通過的測試。我會和其他不應該導致錯誤的測試一起運行。

作爲另一個例子,讀取Generic And Parameterized Types並注意評論經常說「像ClassClassException失敗」這樣的事情應該會失敗,但會成功。這些看起來像是可以自動化的測試。

這不是測試編譯器。這是爲了測試我寫的通用代碼做了它應該做的事情。

我的直覺告訴我,這超出了編譯器或庫所能做的,並進入了IDE魔術,奇怪的項目配置或靜態代碼分析領域。我真的不知道。我只是想確保代碼導致它應該的錯誤,因爲它不會導致它不應該發生的錯誤。我使用eclipse,ant和jUnit,因此詳細說明如何使用它們可以完成的答案將是完美的。

+1

如果您使用JUnit,您可以這樣做:'@Test(expected = NullPointerException.class)'。 – Pokechu22 2014-09-01 06:34:32

+0

類似[這個問題](http://stackoverflow.com/q/156503/2970947)? – 2014-09-01 06:34:54

+0

這是一個運行時異常。我在這裏討論編譯器錯誤。 – CandiedOrange 2014-09-01 06:35:09

回答

2

您可以使用其他軟件運行某些命令並檢查其結果。然後檢查編譯時錯誤是很容易的。可以將它作爲腳本編寫成某種語言,或作爲java中的單獨項目編寫,但它必須與您的項目不同。

要運行的命令應該是javac,ant或任何其他的,具體取決於您的IDE。

+0

我的IDE是與螞蟻eclipse。將它作爲普通構建的一部分自動化,即使它存在於另一個項目中也不失爲一件好事。你見過這個嗎?你能指出任何例子嗎? – CandiedOrange 2014-09-01 23:19:28

+0

ANTUnit可以幫助你http://ant.apache.org/antlibs/antunit/,但我不熟悉ANT,所以我不知道更多。 – j123b567 2014-09-16 13:02:53