NUnit - TestContext.CurrentContext.Result.Outcome.Status Всегда неокончательный - PullRequest
0 голосов
/ 18 октября 2018

Я заметил, что TestContext.CurrentContext.Result.Outcome.Status в NUnit всегда неокончательный в конце тестового прогона.CurrentContext также не знает, что какие-либо утверждения имели место.

Кто-нибудь здесь знает, возможно ли получить статус теста до [TearDown]?Я надеялся использовать значение во время Dispose () моего класса управления тестами для сбора метрик и других данных для диагностики после тестирования.

Пример кода из нового проекта .NET Framework 4.6.1, который имеет толькопакеты NuGet NUnit и FluentAssertions:

namespace TestProject
{
    using FluentAssertions;
    using NUnit.Framework;

    [TestFixture]
    public class Class1
    {
        [Test]
        public void test1()
        {
            var a = 1;
            var b = 2;
            var c = 1;

            var context = TestContext.CurrentContext;

            a.Should().Be(c);

            Assert.AreEqual(a, c);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Вы можете попробовать использовать AssertionScope вместе с флагом AssertionScope.Succeeded.Хотя intelisense для этого свойства указывает:

Получает значение, указывающее, успешно ли выполнено последнее утверждение, выполненное в этой области.

Пример использования AssertionScope

[Test]
public void Test()
{

    var a = 1;
    var b = 2;
    var c = 1;

    var context = new AssertionScope();

    try
    {
        throw new Exception("Test");
    }
    catch (Exception e)
    {
        context.FailWith(e.ToString());
    }

    var strings = context.Discard();

    Console.WriteLine(strings.StringJoin(","));

    context.Succeeded.Should().BeFalse();


    var someOtherContext = new AssertionScope();

    try
    {
        c.Should().Be(a);
    }
    catch (Exception e)
    {
        someOtherContext.FailWith(e.ToString());
    }

    var discard = someOtherContext.Discard();

    Console.WriteLine(discard.StringJoin(","));

    someOtherContext.Succeeded.Should().BeTrue();

}
0 голосов
/ 19 октября 2018

Результат теста начинается с Inconclusive.Если тест пропущен или проигнорирован, то результат изменяется, но, конечно, он никогда не выполняется.

Если он выполняется, результат будет Inconclusive до завершения теста.Очевидно, что пока вы еще выполняете тест, он еще не закончен.Когда начинается демонтаж, результат теста известен, поэтому он будет зависеть от того, был ли успешен сам метод теста.Конечно, исключение в разбивке может изменить результат на состояние ошибки.

Итог, поле Outcome бесполезно, пока сам метод теста все еще работает.В любом случае, если вы выполняете код в методе test, тест еще не завершился неудачей.В противном случае вы бы не продолжили выполнение!

Вы говорите, что не можете использовать TearDown, но предоставленная ссылка не связана с проблемой доступа к результатам теста.Можешь объяснить дальше?Что именно вы хотите сделать после проверки результата теста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...