2011-12-15 13 views
11

Znalazłem klasę TestExecution, która eksponuje kilka wydarzeń, które byłyby niezwykle pomocne. Jednak nie mogę znaleźć odniesienia do niego innego niż dokumentacja MSDN, a dokumentacja nie dostarcza żadnych wskazówek, jeśli chodzi o sposób, w jaki jest używany, lub jak mogę uzyskać odniesienie do instancji podczas uruchomienia testu.Jaki jest cel klasy TestExecution w MSTest?

Przeglądanie za pomocą reflektora .NET nie było pomocne - TestExecution jest implementowane przez inną klasę, UnitTestExecution, która jest wewnętrzna. Nie mogłem znaleźć żadnych innych odniesień do żadnej z klas w żadnej z bibliotek Microsoft.VisualStudio.QualityTools. *, Ani w postaci kolejnych implementacji, ani odwołań jako typów właściwości w innych klasach.

W jaki sposób mogę uzyskać dostęp do tych wydarzeń?

+0

Wygląda jak klasa abstrakcyjna, więc prawdopodobnie będziesz musiał czerpać z niej i implementować niektóre abstrakcyjne metody/właściwości. – Bernard

+0

Niekoniecznie ... Myślę, że jest bardziej prawdopodobne, że abstrakcja jest używana przez framework. Ponieważ jest to klasa publiczna, a ponieważ UnitTestExecution nie jest, wydaje się postępować zgodnie ze schematem ujawniania abstrakcji, ale nie z implementacją. Zwykle istnieje sposób na uzyskanie odwołania do instancji abstrakcji (tak jak w przypadku właściwości TestContext, gdzie TestContext jest także klasą abstrakcyjną), ale nie udało mi się go znaleźć. –

+0

Wydaje się, że jest to jedna z tych sytuacji, w których najlepiej byłoby zapytać autora. – Bernard

Odpowiedz

10

Instancja TestExecution jest dostarczana podczas wdrażania niestandardowego TestExtensionExecution. Zapewnia on metodę Initialize, którą można przesłonić, aby zasubskrybować zdarzenia testowe.

Jest to zazwyczaj część implementacji niestandardowego atrybutu testu w MSTest.

Edit Aby tworzyć własne rozszerzenia testową, należy rozpocząć tworzenie nowego atrybutu, który wynika z Microsoft.VisualStudio.TestTools.UnitTesting.TestClassExtensionAttribute, która jest klasą abstrakcyjną wymagając, aby zapewnić TestExtensionExecution metodą GetExtension().

Zastosuj atrybut do jednej z metod badań i powinieneś być w stanie zapisać się do tych wydarzeń w czasie badania (wewnątrz implementacji TestExtensionExecution zwróconego przez atrybut)

pamiętać, że również wdrożyć ITestMethodInvoker który powinieneś być w stanie stworzyć z właściwości TetMethodInvokerContext.TestMethodInfo dostarczonej do metody TestExtensionExecute.CreateTestMethodInvoker.

+1

Jak skonfigurować jedno z tych rozszerzeń do użycia? –

+0

Chciałbym, aby ta informacja była już częścią dokumentacji MSTest na MSDN. –