10

我正在使用 Microsoft WebTest 并希望能够做类似于 NUnit 的Assert.Fail(). 我想出的最好的方法是,throw new webTestException()但这在测试结果中显示为 aError而不是 a Failure

除了反映WebTest设置私有成员变量来指示失败之外,还有什么我错过的吗?

编辑:我也使用了该Assert.Fail()方法,但是当从 WebTest 中使用时,这仍然显示为错误而不是失败,并且该Outcome属性是只读的(没有公共设置器)。

编辑:现在我真的很难过。我使用反射将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 框架并没有真正使用它来确定测试通过/失败结果。

4

6 回答 6

3

Outcome 属性设置为Fail

Outcome = Outcome.Fail;

Microsoft.VisualStudio.QualityTools.UnitTestFramework程序Assert.Fail()集中还有一个。

于 2008-10-22T04:15:15.107 回答
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;
    }
}
于 2010-05-06T14:53:16.030 回答
1

适用于声明性测试(以及编码)的解决方案是:

  • 编写一个验证规则,当上下文中存在某个上下文参数(例如'FAIL')时失败
  • 当你想触发失败时,设置上下文参数并调用 WebTest.Stop()
  • 将验证规则添加为 WebTest 级别规则(不是请求级别),以便它在所有请求上运行

我认为这是可以做到的尽可能简洁。

于 2012-05-09T05:52:56.967 回答
1

Outcome 属性将在 vsts 2010 上公开 :-)

于 2009-06-25T06:25:17.163 回答
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

我知道这个话题很老,但我希望它对某人有所帮助:)

于 2013-06-10T15:39:35.037 回答
0

在 PostWebTest 事件处理程序中设置 Outcome 的值。

于 2010-05-07T20:17:56.600 回答