2017-07-06 68 views
0

最近,我正在閱讀本書Growing Object-Oriented Software, Guided by Tests,我對他們對Junit行爲的描述感到困惑。通過方法或類創建每個Junit實例

如果我理解作者說的話,Junit會創建一個測試類的新實例,並在每個測試方法中確保它們彼此隔離。

要運行測試,JUnit將創建一個新的測試類實例,並調用相關的測試方法。每次創建一個新的測試對象 可確保測試彼此隔離,因爲在每次測試之前將替換對象的字段。這意味着測試 可以自由更改任何測試對象字段的內容。

然後他們說,在NUnit的(淨)是不同的,因爲它重複使用相同的測試對象爲所有的測試方法,所以你需要使用SetupsTearDowns重置對象。

NUnit的從JUnit的表現不同那些在.Net工作應注意 NUnit的重用所有 測試方法測試對象的同一實例,這樣有可能改變的任何值必須要麼在 [設置]重置和[TearDown]方法(如果它們是字段)或本地化爲測試方法 。

雖然JUnit的行爲就像他們描述的NUnit行爲一樣,所以您的類實例可以在同一個類中重用,並且您可以使用Setups和TearDown來重置它們。因此,JUnit的行爲如何,它在每個方法中實例化測試類,否則它會立即測試類。

也許我不明白作者的意思。他們是什麼意思?

+1

描述是正確的,JUnit爲每個測試創建一個新對象。親自嘗試一下。 – markspace

+0

@markspace是的,我誤解了JUnit的行爲 – Pau

+1

並且NUnit的描述也是正確的。不同的軟件,針對不同的平臺,由不同的人編寫,具有不同的願景。:-) – Charlie

回答

2

JUnit爲每個測試實例化測試類(也就是用@Test註解的方法)。

設置和拆卸方法僅用於幫助您編寫清晰易讀的測試 - 通過提取測試環境的常見設置,前提條件和驗證,以免混淆測試本身。

  1. 的環境設置是靜態並且可以共享accros類中的所有測試 - 這是確定只有一次創建它 - @BeforeClass@AfterClass註釋(注意,方法必須是靜態的)

  2. 的環境設置是特定於每個測試和不能accros類中的所有測試共享 - 的@Before@After註解

相關問題