2010-08-27 17 views
31

Czy jest jakiś stan globalny gdzie mogę uzyskać dostęp do aktualnie uruchomionej nazwy testu?Jak programowo uzyskać dostęp do nazwy testu NUnit?

Mam testy, które wyprowadzają pliki do katalogu i czytają je z powrotem. Chciałbym, aby każdy test tworzył katalog, w którym można by odtwarzać, a następnie czyścił po sobie, a ja nie chcę wypychać tej nazwy w (Musiałbym uczynić to unikalnym, a następnie upewnić się, że każdy test utrzymuje go wyjątkowym; ew). Mógłbym użyć identyfikatora GUID, ale chciałbym, aby metody pomocnicze były w stanie założyć, że "jest to miejsce, w którym powinny być przechowywane pliki testowe", bez konieczności wysyłania do nich identyfikatora GUID. Ponownie, to prowadzi do jakiegoś globalnego stanu.

Zasadniczo chcę wywołanie takie jak TestRunner.Current.CurrentTest.Name. Czy coś takiego istnieje?

Odpowiedz

22

nie mam zaktualizowany do 2.5.7 jeszcze siebie, ale zawiera TestContext klasę, która wydaje się zapewniać to, czego szukasz: http://www.nunit.org/index.php?p=releaseNotes&r=2.5.7

+0

Działa to świetnie. Używam Regexa do usuwania wszelkich znaków, które nie działają w nazwie katalogu, i wszystko jest w porządku. Dzięki! – TALlama

+0

Aby użyć go w kodzie, pobierz TestContext, wywołując statyczną metodę CurrentContext. Na przykład: TestContext.CurrentContext.Test.Name –

4

Zakładając jedną metodę na test, w kodzie NUnit, możesz użyć odbicia, aby uzyskać nazwę metody ze stosu stacków.

Jeśli piszesz metody pomocnika w kodzie NUnit zwany przez innych metod, aby to zrobić rejestrowanie plików, można użyć tej składni w celu sprawdzenia poprzedniej metody:

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

zobaczyć odpowiedzi na question 44153, "Can you use reflection to find the name of the currently executing method?" po więcej szczegółów.

+0

To nie będzie obsługiwać metod [TestCase], które są wywoływane wiele razy, ale jest wystarczająco blisko, aby otrzymać rep. – TALlama

25

(Zakładając, C#)

NUnit.Framework.TestContext.CurrentContext.Test.Name 

lub

NUnit.Framework.TestContext.CurrentContext.Test.FullName 
+0

To było pierwotnie sugerowane użycie this.GetType(). ToString() Jeśli byłeś leniwy; jednak to nie działa w przypadku testów opartych na TestCaseSource, należy użyć jednego z dwóch przeciążeń z TestContext do pracy we wszystkich scenariuszach. – aolszowka

Powiązane problemy