2015-09-08 25 views
1

我有一個在Automation中運行的測試套件。所有這些測試都是功能性UI測試。它看起來像下面是否可以忽略TearDown或清理代碼中的異常

[SetUp] 
public void Setup() 
{ 
    CreatePolicy(); 
}  

[Test] 
public void Test1() 
{ 
    EditPolicyAndValidateResults(); 
} 

[Test] 
public void Test2() 
{ 
    EditPolicyAndValidateResults(); 
} 

[TearDown] 
public void TearDown() 
{ 
    DeletePolicy(); 
} 

現在,問題是DeletePolicy()有時失敗(隨機一個或兩個測試的),並且因爲它的相應的測試失敗。 規避失敗,如果已經添加了一個try catch塊來DeletePolicy(),它看起來像下面這樣:

[TearDown] 
public void TearDown() 
{ 
    try 
    { 
     DeletePolicy(); 
    } 
    catch(Exception ex) 
    { 
     // Do nothing 
    } 
} 

由於測試DeletePolicy()功能是不是我的測試用例的意圖,這種方法看起來好像沒什麼問題。這是正確的還是我在這裏錯過了一些東西?

+0

「測試」DeletePolicy和「依賴於」DeletePolicy是兩個不同的東西。我會保持謹慎。考慮間歇性失敗是明智的。作爲一種臨時解決方案,直到可以考慮吞嚥異常「作品」爲止。 –

+0

不知道CreatePolicy是否會導致某些內容持續存在,因此很難回答這個問題。如果是這樣,我認爲你必須進一步調查。如果沒有,也許你可以說這不是我在這裏測試和忽略它。當人們間斷地說事情時,我總是懷疑。我的經驗是,如果是這樣的話,那麼通常會有某種邏輯缺陷。 –

回答

1

Unit Testing的一般模式是:Arrange,Act然後AssertAAA

Setup僅僅是一個指定的方法來Arrange以更好的方式測試(通過重新設置任何先前嘲笑例如/存根對象,以節省時間,並避免代碼重複)。這絕不是強制性的,只是一種幫助測試編碼器更好編碼的方法。

TearDown再次以同樣的方式是一個幫手,它比AAA更一般的概念比Setup更遠。這是因爲在AAA沒有提到任何關於破壞或清理。

因此,請隨時忽略TearDown中的任何故障,除非它在某種程度上重要。也許你的眼睛裏隱藏着一些東西,但你還沒有考慮到。在失敗點進行另一個單元測試可能很重要,但它完全取決於你的情況。