2008-10-22 63 views
9

我正在使用Microsoft WebTest,並希望能夠執行類似於NUnit的Assert.Fail()的操作。最好的我想出了throw new webTestException(),但這在測試結果中顯示爲Error而不是Failure我如何失敗WebTest?

除了反映在WebTest上以設置私有成員變量來指示失敗之外,有沒有我錯過的東西?

編輯:我也使用了Assert.Fail()方法,但是當從WebTest內部使用,並且Outcome屬性是隻讀屬性(沒有公共setter)時,它仍然顯示爲錯誤而不是失敗。

編輯:好了,現在我真的難住了。我用反射來設置Outcome屬性失敗,但測試仍然通過!

下面是設置Oucome的代碼失敗:

public static class WebTestExtensions 
{ 
    public static void Fail(this WebTest test) 
    { 
     var method = test.GetType().GetMethod("set_Outcome", BindingFlags.NonPublic | BindingFlags.Instance); 
     method.Invoke(test, new object[] {Outcome.Fail}); 
    } 
} 

,這裏是我試圖失敗代碼:

public override IEnumerator<WebTestRequest> GetRequestEnumerator() 
    { 
     this.Fail(); 
     yield return new WebTestRequest("http://google.com"); 
    } 

Outcome是越來越設置爲Oucome.Fail但顯然WebTest的框架並不真正使用它來確定測試通過/失敗結果。

回答

2

設置Outcome property失敗

Outcome = Outcome.Fail; 

還有在Microsoft.VisualStudio.QualityTools.UnitTestFramework裝配的Assert.Fail()

+0

本來應該更清晰......我有已經嘗試了這兩個。 (編輯問題反映此) – craigb 2008-10-22 14:08:22

1

結果屬性將設置公衆VSTS 2010 :-)

1

如何:

Assert.IsTrue(false); 

我沒有驗證它,所以它有可能它會得到報告出錯剛像Assert.Fail(),我同意這是一個黑客。但是由於Assert.Fail()似乎沒有按照您期望的方式工作,並且也沒有設置結果,所以我沒有看到另一種選擇。

1

您通過添加總是失敗的驗證規則來使測試總是失敗。例如,你可以寫這樣的失敗驗證規則:

public class FailValidationRule : ValidationRule 
{ 
    public override void Validate(object sender, ValidationEventArgs e) 
    { 
     e.IsValid = false; 
    } 
} 

再附上您在WebTest的的ValidateResponse事件,像這樣新的驗證規則:

public class CodedWebTest : WebTest 
{ 
    public override IEnumerator<WebTestRequest> GetRequestEnumerator() 
    { 
     WebTestRequest request1 = new WebTestRequest("http://www.google.com"); 
     FailValidationRule failValidation = new FailValidationRule(); 
     request1.ValidateResponse += new EventHandler<ValidationEventArgs>(failValidation.Validate); 
     yield return request1; 
    } 
} 
0

坐落在PostWebTest成果的價值事件處理器。

1

的溶液,將在聲明性測試工作(以及編碼)是:

  • 寫失敗當某一上下文參數(例如,驗證規則'FAIL')出現在上下文中當您要觸發失敗時,設置上下文參數並調用WebTest.Stop()
  • 將驗證規則添加爲WebTest級別規則(而不是請求級別)以便它可以在所有請求上運行

我認爲這是儘可能簡潔的,因爲它可以做到。

1

首先,我正在使用VB.net,但我也試圖設置結果失敗,然後發現它不起作用(這使我在這裏)。

我終於設法只是拋出一個異常做到這一點:

Public Overrides Sub PostRequest(ByVal sender As Object, ByVal e As PostRequestEventArgs) 

    If YourTest = True Then 

     Throw New WebTestException("My test Failed") 

    End If 

    MyBase.PostRequest(sender, e) 

    End Sub 

我知道這個話題是舊的,但我希望它可以幫助別人呢:)