Как получить доступ к имени теста NUnit программно? - PullRequest
37 голосов
/ 28 августа 2010

Есть ли где-нибудь глобальное состояние, в котором я могу получить доступ к имени запущенного в данный момент теста?

У меня есть тесты, которые выводят файлы в каталог и считывают их обратно. Я бы хотел, чтобы каждый тест создавалкаталог для воспроизведения, а затем убирать за собой, и я не хочу вставлять это имя (мне нужно сделать его уникальным, а затем убедиться, что каждый тест сохраняет его уникальным; например).Я мог бы использовать GUID, но я хотел бы, чтобы вспомогательные методы могли предполагать, что «это место, где должны храниться тестовые файлы», не прибегая к этому GUID.Опять же, это шнеки для глобального состояния где-то.

По сути, я хочу такой вызов, как TestRunner.Current.CurrentTest.Name.Существует ли такая вещь?

Ответы [ 3 ]

32 голосов
/ 15 января 2013

(Предполагая c #)

NUnit.Framework.TestContext.CurrentContext.Test.Name 

или

NUnit.Framework.TestContext.CurrentContext.Test.FullName

или если вы действительно ленивы и не ведете свои тесты с TestCaseSource (спасибо @aolszowka):

this.GetType().ToString()
24 голосов
/ 02 сентября 2010

Я еще не обновился до 2.5.7, но он включает класс TestContext, который, кажется, обеспечивает именно то, что вы ищете: http://www.nunit.org/index.php?p=releaseNotes&r=2.5.7

4 голосов
/ 29 августа 2010

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

Если вы напишите вспомогательный метод в своем коде NUnit, вызываемый другими методами для ведения этого журнала, вы можете использовать этот синтаксис для проверки предыдущего метода :

string MethodName = new StackFrame(1).GetMethod().Name;

См. Ответы на вопрос 44153: «Можете ли вы использовать отражение, чтобы найти имя выполняемого в настоящее время метода?» для получения более подробной информации.

...