我正在使用Microsoft WebTest,并希望能够执行与NUnit Assert.Fail()
类似的操作。我提出的最好的是throw new webTestException()
,但这在测试结果中显示为Error
而不是Failure
。
除了反映WebTest
设置私有成员变量以指示失败之外,还有一些我错过了吗?
Assert.Fail()
方法,但是当从WebTest中使用时,这仍然显示为错误而不是失败,Outcome
属性是只读的(没有)公共制定者)。
编辑:好吧,现在我真的很难过。我使用反射将Outcome
属性设置为Failed,但测试仍然通过!
以下是将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框架并不真正使用它来确定测试通过/未通过结果。
答案 0 :(得分:2)
将Outcome property设置为失败:
Outcome = Outcome.Fail;
Microsoft.VisualStudio.QualityTools.UnitTestFramework 程序集中还有一个Assert.Fail()
。
答案 1 :(得分:1)
Outcome属性将在2010年的版本中设置公众: - )
答案 2 :(得分: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;
}
}
答案 3 :(得分:1)
在声明性测试(以及编码)中起作用的解决方案是:
我认为这是可以做到的简洁。
答案 4 :(得分: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
我知道这个话题已经过时了,但我希望它能帮助某人:)
答案 5 :(得分:0)
在PostWebTest事件处理程序中设置Outcome的值。