2016-04-19 5 views
0

В NUnit 2.6.4, я использовал ниже C# код повторно запустить отказавший тест:Как я могу повторно запустить тест nunit программно в 3.2?

TestExecutionContext.CurrentContext.CurrentTest.Run(new NullListener(), TestFilter.Empty); 

Но после обновления до NUnit 3.2, TestExecutionContext.CurrentContext.CurrentTest возвращает нуль. Как я могу повторно запустить тест в 3.2?

ответ

0

я смог добиться этого следующим образом ....

using NUnit.Framework.Internal; 
using NUnit.Framework.Internal.Commands; 
using NUnit.Framework.Internal.Execution; 

TestActionCommand command = new TestActionCommand(CommandBuilder.MakeTestCommand(TestExecutionContext.CurrentContext.CurrentTest as TestMethod)); 
command.Execute(TestExecutionContext.CurrentContext); 
+0

Хотя это должно работать в текущей сборке, оно разделяет недостаток оригинального решения, которое заключается в том, что он использует внутренние классы, которые могут измениться в будущем. Тем не менее, это довольно безопасно, по крайней мере, на некоторое время. :-) – Charlie

0

Если вы пытаетесь повторно запустить свои тесты из-за того, что они изредка из-за временных ошибок сети или чего-то подобного, NUnit 3.x ввел атрибут Retry, который будет повторять тест определенное количество раз.

+0

Спасибо. Возможно ли программное изменение количества повторов в методе настройки, например? – quldude

+0

Нет, счетчик повторов является фиксированным макс. Я бы просто попытался определить подходящее число для вашей ситуации. –

+0

Есть ли способ повторного запуска теста, как я использовал в nunit 2.6.4? Причина, по которой я хочу это сделать, состоит в том, что в качестве входного параметра у меня счетчик повторов. – quldude

0

Единственный способ, которым я могу думать о том, как это можно было бы сделать в NUnit 3.x оборачивает тестовый код, который может быть причиной сбоя в цикле и поместите блок catch try внутри цикла, который только продолжается в блоке catch.

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

0

Я боюсь, что то, что вы делали в NUnit 2.6.4, не поддерживало способ запуска тестов. Он работал только благодаря использованию нескольких внутренних классов. Я предлагаю использовать опубликованные API и запрашивать функции там, где они вам нужны, а не использовать внутренние классы и методы, которые могут измениться произвольно в будущем.

+0

Не могли бы вы привести пример того, как это сделать, используя API? – quldude

+0

Посмотрите здесь: https://github.com/nunit/dev/wiki/Test-Engine-API – Charlie

+0

Я использовал TestEngine для запуска теста. Это выполняется при необходимости, настройке, тестировании, разрыве и методах onetimeteardown. Но есть ли способ использовать только методы настройки, тестирования и разрыва? – quldude