2013-03-21 65 views
3

我正在爲一個方法的行爲編寫一個單元測試,並且想要試圖減少我的代碼重複 - 我即將再次使測試用例增加一倍,並且該文件有點難以查看。我可以將單元測試結果驗證放在@After方法中嗎?

如果有人的真的感興趣,the code is here(警告未來 - 鏈接可能不是永久性的)。

現在,我這樣做,反覆幾次稍微不同的方式:

@Test 
public void testAdd64OfMax64() { 
    // Set up container 
    TileEntityChest nmsinv = new TileEntityChest(); 
    Inventory container = new CraftInventory(nmsinv); 
    // Call method 
    HashMap<Integer,ItemStack> leftover = container.addItem(new ItemStack(Foo, 64)); 
    // Set up expected result 
    ItemStack[] expected = empty.clone(); 
    expected[0] = new ItemStack(Foo, 64); 
    // Verify result 
    assertThat(container.getContents(), is(expected)); 
    assertThat(leftover, is(Collections.EMPTY_MAP)); 
} 

(注:assertThat來自org.hamcrest.Matchers

我知道,我可以把「設置容器「並將空數組克隆到@Before方法中。

我的問題是,我可以將assertThat方法放入@After方法並且測試仍然失敗(當它應該失敗時)?

回答

3

否。在測試運行後,應使用After方法釋放外部資源。另外請注意,即使你的方法拋出一個異常,在你的情況下可能是不可取的,它仍能保證運行。

此外,請考慮將來必須維護您的代碼的人員。您正在通過驗證After方法中的測試結果來違反PLA。沒有人期待這一點!

如果您創建了輔助方法,例如checkResults這是在您的每個Test方法的末尾調用以驗證結果。

+0

哦,一個'checkResults'方法..沒有考慮到這一點。是的,這聽起來像我想要的。 – Riking 2013-03-21 15:38:41