NUnit - можно ли подсчитать общий тест, общее время, общий пройденный тест? - PullRequest
1 голос
/ 13 марта 2019

Можем ли мы подсчитать общий тест, общее время, общий пройденный тест в NUnit?

В настоящее время имея, в каком тесте получил отождествление с Pass / Fail. Я ищу, если есть какой-либо метод, который дает счет;

            if (TestContext.CurrentContext.Result.Outcome.Status.ToString() == "Failed")
            {
                Log.Info("TestContext.Message = " + TestContext.CurrentContext.Result.Message);
                Log.Info("TestContext.StackTrace = " + TestContext.CurrentContext.Result.StackTrace);
            }
            else if (TestContext.CurrentContext.Result.Outcome.Status.ToString() == "Passed")
            {
                Log.Info("TestContext.Status = " + TestContext.CurrentContext.Result.Outcome.Status.ToString());
            }
            else
            {
                Log.Info("Undefined TestContext.Status = " + TestContext.CurrentContext.Result.Outcome.Status.ToString());
            } 

1 Ответ

2 голосов
/ 13 марта 2019

Как вы уже догадались, TestContext действительно полезен только во время выполнения тестов. Попытка получить окончательные результаты во время проведения тестов - это все равно что попытаться получить окончательный счет за отель, пока вы еще используете комнату. Ответ, который вы получите, является предварительным и может быть изменен, например, если вы завтракаете, берете что-нибудь из мини-бара, смотрите фильм и т. Д.

По этой причине лучше дождаться окончания тестов, чтобы посмотреть на результаты. Для отдельного теста это будет в методе [TearDown]. Для прибора или SetUpFixture в методе [OneTimeTearDown]. Тем не менее, если эти методы вызывают исключение, все ставки отменены!

Для полного запуска я бы использовал расширение движка, а не вставлял код в мои тесты. Вы бы написали расширение TestListener. В нем вы будете действовать только после завершения всего теста. Тогда будет доступен весь результат теста, включая все подсчеты. Это «правильный» подход, но это также немного больше работы, чем то, что вы делаете. Подробности смотрите в документации.

Другой подход заключается в написании программы, которая обрабатывает XML-файл результатов теста и получает туда информацию. Преимущество этого состоит в том, что это отдельная простая программа, которая не требует от вас умения писать расширения.

Наконец, в качестве обходного пути вы можете использовать код, похожий на тот, который у вас есть. Однако может работать не во всех будущих выпусках, поскольку использует знания внутренних структур ...

  1. Создание уровня сборки SetUpFixture с помощью метода OneTimeTearDown. Чтобы быть на уровне сборки, он должен находиться за пределами любого из ваших пространств имен.

  2. В OneTimeTearDown введите NUnit.Framework.Internal.TestExecutionContext.CurrentContext.CurrentResult. Это поле является TestResult и содержит все, что нужно знать о результате сборки, включая количество пройденных, неудачных испытаний и т. Д.

  3. Что бы вы ни делали, не пытайтесь делать ничего , которое изменяет TestResult. Скорее всего, вы что-то сломаете, если сделаете это. : -)

Удачи!

...