2012-06-14 48 views
0

我試圖將我的一些WebDriver測試從JAVA移植到C#。什麼我卡上時,司機無法找到網頁上的一些元素的情況下,在JAVA我做的:如何強制在MSTest中通過C#測試失敗

if (second >= 10) fail("timeout - " + list); 

所以如果有什麼需要超過10秒的測試失敗與超時消息。 我試着在C#與

if (sec >= 10) Debug.Fail("timeout : " + vList); 

了類似的方法,但是這其實沒有失敗的測試,但給了我一個選擇與異常消息框這樣做。這是一個不錯的,我需要我的自動測試來徹底失敗。然後我試了

if (sec >= 10) Assert.Fail("timeout : " + vList); 

但是這是拋出未處理的異常錯誤。我應該在try/catch塊中放置Assert.Fail嗎?還是應該使用完全不同的東西來通過測試?

我正在使用MSTest,如主題中所述。

EDIT:確切信息是:

AssertFailedException是由用戶代碼未處理。 Assert.Fail失敗。 超時:someField。

Assert.Fail( 「超時:」 + VLIST);

+0

未處理的異常,它在哪裏被拋出? – Arran

+0

這是預期的行爲。如果所有'Assert'方法失敗,都會拋出一個'AssertFailedException',這樣您就可以看到測試失敗了。如果你發現異常,測試將通過。 – Schaliasos

+0

嗯,好的。問題是測試會拋出未處理的異常並暫停,並顯示未處理的異常消息。我希望它失敗了,但之後停止,報告失敗。 – tom

回答

4

我認爲你必須使用適當的語法你看到了這種行爲,因爲你已經將調試器連接到運行測試 - Assert.Fail拋出AssertFailedException,你的調試器發現異常並中斷 - 而且你沒有得到測試結果。

在調試菜單上,進入例外,找到AssertFailedException(或爲它創建一個條目,如果它不存在),並確保在該例外類型中關閉throw中斷。

或者,在沒有附加調試器的情況下運行測試。

+0

DIdin甚至不知道你可以在沒有調試的情況下開始。我將異常添加到例外列表中,並解決了問題。謝謝! – tom

+0

不用擔心。 – tomfanning

+0

方便的提示。 'Ctrl-R然後T'在沒有附加調試器的情況下運行測試,'Ctrl-R然後Ctrl-T'運行帶有*附加調試器的測試*。 – tomfanning

1

Assert.Fail應該是你想要「強制」失敗。在內部,它會拋出一個AssertFailedException。別的東西可以去。如果這行不通......

快速dotPeek顯示了這個被調用:

internal static void HandleFail(string assertionName, string message, params object[] parameters) 
{ 
    string str = string.Empty; 
    if (!string.IsNullOrEmpty(message)) 
    str = parameters != null ? string.Format((IFormatProvider) CultureInfo.CurrentCulture, Assert.ReplaceNulls((object) message), parameters) : Assert.ReplaceNulls((object) message); 
    if (Assert.AssertionFailure != null) 
    Assert.AssertionFailure((object) null, EventArgs.Empty); 
    throw new AssertFailedException(FrameworkMessages.AssertionFailed((object) assertionName, (object) str)); 
} 
0

爲MSTEST

[TestMethod] 
public void IsSecondsGreaterOrEqualThanTen() 
{ 
    Assert.IsTrue(second >= 10); 
} 
+0

他想要相反。 'Assert.IsTrue(second <10);'或'Assert.IsFalse(second> = 10);' – Schaliasos

相關問題