2011-01-13 8 views
18

Mam 2 pytania dotyczące testowania integracji przy użyciu VS 2010Jak zamówić metody wykonywania za pomocą Visual Studio do testowania integracji?

Po pierwsze, naprawdę potrzebuję znaleźć sposób, aby wykonać te metody testowania w kolejności, w jakiej chcę je. Uwaga: wiem, że w testowaniu jednostkowym, metody powinny działać niezależnie od czegokolwiek innego, ale są to testy integracyjne, które zależą od kolejności, w której metoda jest uruchamiana jako pierwsza.

Czy istnieje sposób na utrzymanie zmiennej lokalnej poprzez przeprowadzenie testów? Na przykład jak poniższy kod, który teraz kończy się niepowodzeniem.

[TestClass] 
public class UnitTest1 
{ 
    int i = 0; 
    [TestMethod] 
    public void TestMethod1() 
    { 
     i = 5; 
    } 

    [TestMethod] 
    public void TestMethod2() 
    { 
     Assert.AreEqual(5, i); 
    } 
} 

Czy istnieje sposób na wykonanie którejkolwiek z tych czynności?

Odpowiedz

21

Aby wykonać testy w określonej kolejności I następnie wykonać następujące kroki:

w projekcie testowym z test1, test2 i test3

1 kliknij prawym przyciskiem myszy na projekcie 'Dodaj' -> "nowy test ...”
2 Wybierz 'Zamówione test'
3 dwukrotnie kliknij plik t pojawia się kapelusz "OrderedTest1.orderedtest”

alt text

4 budowania projektu, jeśli nie został utworzony wcześniej
5 Z listy dostępnych testów wybierz test, który chcesz i kolejność ich

alt text

z tego po czym pojawia się nowy test w edytorze listy testowej:

alt text

Jest to dodatkowy test, który uruchamia załączone testy w prawidłowej kolejności, ale jeśli w teście wykonasz wszystkie testy niedbale, testy zawarte na uporządkowanej liście zostaną wykonane dwukrotnie, więc musisz jakoś zarządzać listami lub przetestuj kategorie, aby tego uniknąć.
Próbowałem wyłączyć poszczególne testy, ale to również wyłącza zamówiony test, nie wiem lepszy sposób to zrobić.

+0

Dziękuję Cristian za poświęcony czas na pix. Oznacziłem to jako odpowiedź. Chociaż muszę powiedzieć, że to może być zbyt wiele dla tego, czego szukałem, więc prawdopodobnie będę musiał włączyć wiele testów do jednej metody testowej na teraz. Skontaktowałem się również z Roba, powiedział, że różni biegacze testów zachowują się inaczej, VS wydaje się wykonywać te metody testowe w kolejności losowej, ponieważ traktuje je jako testy jednostkowe, które powinny być w stanie działać w dowolnej kolejności. Żałuj, że nie mają atrybutu do oznaczenia klasy testowej jako [Test integracji], a następnie wykonuj metody w kolejności, w jakiej się pojawiają. –

+0

@Cristian, po przeczytaniu wielu "Nie można tego zrobić" i "powinieneś zmienić nazwę swoich testów, aby zamówić je alfabetycznie" itd. Twoja odpowiedź jest pierwszą, która działa bez bycia hackerem. Dziękuję Ci za to! – callisto

6

Najlepiej jest używać funkcji do konfigurowania testów i ich czyszczenia za pomocą atrybutów [TestInitialize] i [TestCleanUp] lub [ClassInitialize] i [ClassCleanup].
http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting(v=VS.100).aspx

Następny kod jest przykładem coś podobnego do tego, co chcesz:

[TestClass] 
public class UnitTest1 
{ 
    int i=0; 

    [TestInitialize] 
    public void Setup() 
    { 
     i = 5; 
    } 

    [TestMethod] 
    public void TestMethod1() 
    { 
     Assert.AreEqual(5, i); 
    } 
} 

Funkcja nastaw zostanie wezwany przed wykonaniem każdego testu. Jeśli chcesz przekazać wartość z jednego testu do drugiego, możesz rozważyć użycie zmiennej statycznej, która nie jest zalecana ze względu na nieokreśloną kolejność wykonywania.

Zazwyczaj istnieje sposób na uniknięcie potrzeby konkretnego zamówienia za pomocą techniki instalacji/czyszczenia, ale prawdą jest, że może to nie być prawdą w przypadku bardzo złożonych testów integracyjnych.
Jeśli nie ma możliwości, aby uniknąć konieczności ich ponownego zamawiania, można rozważyć scalenie ich w jeden, co stanowi kolejny przykład najlepszej praktyki polegającej na posiadaniu tylko jednego dowodu na test, ale jeśli są one tak bardzo zależne od siebie, może to być nawet lepiej w ten sposób, ponieważ w tym przypadku jedno niepowodzenie testu może zagrozić wynikowi pozostałych.

EDIT: mogą używać zamówione testy odpowiedzi na pytanie nr 1, a przy użyciu zmiennych statycznych Pytanie 2: http://msdn.microsoft.com/en-us/library/ms182631.aspx

+0

Dziękuję Cristian za twój wkład. Jestem świadomy atrybutów, o których wspomniałeś i niestety nie są one tym, za czym jestem. Używam testów integracyjnych względem źródła danych testowych, więc nawet jeśli nie uda im się gdzieś w środku, mogę przywrócić dane z powrotem. Widziałem wideo Rob Conery na SpecFlow, w którym wydawało się, że to osiągnęło http://tekpub.com/view/concepts/5 Po prostu nie wiem, jak to zrobił. –

+0

Właśnie dodałem, edytowałem pytanie i dodałem pomysł zamówionych testów. Daj mi znać, jeśli to naprawdę działa. –

+0

Dzięki Cristian, sprawdziłem zamówione testy, ale nie wiem, jak je zmusić do egzekucji? Wybrałem testy, które chcę, na panelu po prawej stronie, ale kiedy wykonałem test, uruchomiłem wszystkie testy, które mam w całym rozwiązaniu, jakieś pomysły? –

Powiązane problemy