Как я могу провалить веб-тест? - PullRequest
9 голосов
/ 22 октября 2008

Я использую Microsoft WebTest и хочу сделать что-то похожее на NUnit's 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 на самом деле не использует это для определения результатов теста / неудачи.

Ответы [ 6 ]

2 голосов
/ 22 октября 2008

Установите для свойства Outcome значение Fail :

Outcome = Outcome.Fail;

Существует также Assert.Fail() в Microsoft.VisualStudio.QualityTools.UnitTestFramework сборке.

1 голос
/ 10 июня 2013

Прежде всего, я работаю с 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

Я знаю, что эта тема старая, но надеюсь, она все равно кому-нибудь поможет:)

1 голос
/ 09 мая 2012

Решение, которое будет работать в декларативных тестах (а также в коде):

  • написать правило проверки, которое не выполняется, если в контексте присутствует определенный параметр контекста (например, «FAIL»)
  • когда вы хотите вызвать сбой, установите параметр контекста и вызовите WebTest.Stop ()
  • добавить правило проверки как правило уровня WebTest (не уровня запроса), чтобы оно выполнялось для всех запросов

Я думаю, что это настолько сжато, насколько это возможно.

1 голос
/ 06 мая 2010

Вы делаете тест всегда неудачным, добавляя правило проверки, которое всегда терпит неудачу. Например, вы можете написать правило проверки неудачи, например:

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

Затем прикрепите новое правило проверки к событию 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;
    }
}
1 голос
/ 25 июня 2009

Свойство Outcome установит публику на VSTS 2010: -)

0 голосов
/ 08 мая 2010

Установите значение Outcome в обработчике событий PostWebTest.

...