Если вы действительно хотите, чтобы ваш тест был Inconclusive
, то для этого есть Assume.That
. Используйте его так же, как если бы вы использовали Assert.That
, и указанное ограничение не выполнится, ваш результат теста будет неубедительным.
Это будет самый простой ответ на ваш вопрос.
Однако, читая вы пытались, я не думаю, что вы действительно хотите Inconclusive
, по крайней мере, не так, как это определено NUnit.
В NUnit, Inconclusive
означает, что тест не считается, потому что он не мог быть запущенным Результат в основном исчезает, и тестовый запуск выполнен успешно.
Вы, похоже, говорите, что хотите получить уведомление о том, что условие не выполнено. Это имеет смысл в ситуации, когда (например) inte rnet не было доступно, поэтому ваш тестовый прогон не является окончательным.
NUnit предоставляет Assert.Ignore
и Warn.If
(также Warn.Unless
) для эти ситуации. Или вы можете установить соответствующие состояния результатов в своем пользовательском атрибуте.
Относительно реализации ... RunState
теста применяется к его статусу еще до того, как кто-либо попытался его выполнить. Так, например, RunState
может игнорироваться, если кто-то использовал IgnoreAttribute
, или может быть NotRunnable, если для него требуются аргументы, и ни один из них не предоставлен. Inconclusive
run sttate не существует, потому что это означало бы, что тест написан так, что он все время не дает результатов, что не имеет смысла. Интерфейс IApplyToTest
позволяет атрибуту изменять состояние теста в точке обнаружения еще до его запуска, поэтому вы не захотите его использовать.
После NUnit попытался выполнить тест, он получает ResultState
, который может быть неокончательным. Вы можете повлиять на это в коде теста, но не через атрибут. Здесь нужно что-то, что проверяет условия, необходимые для запуска теста непосредственно перед его запуском, и пропускает выполнение, если условия не выполняются. Этот атрибут должен быть тем, который генерирует команду в цепочке команд, выполняющих тест. Вероятно, для этого потребуется реализовать ICommandWrapper
, что немного сложнее, чем IApplyToTest
, потому что код атрибута должен генерировать экземпляр команды, который будет правильно работать с самим NUnit и другими командами в цепочке.
Если бы у меня была такая ситуация, я полагаю, что использовал бы параметр Run, чтобы указать, должно ли быть доступно целое число rnet. Затем тесты могут
Assume.That(InternetIsNotNeeded());
молча игнорировать эти тесты или потерпеть неудачу, как и ожидалось, когда будет доступен inte rnet.