Porady: tworzenie testu jednostkowego opartego na danych
Kod zarządzany przy użyciu struktury testowej jednostki firmy Microsoft, można skonfigurować metoda testu jednostki do pobierania wartości używane w metodzie badania ze źródła danych.Metoda jest wykonywane kolejno dla każdego wiersza w źródle danych, co ułatwia testowanie różnych danych wejściowych przy użyciu jednej metody.
Ten temat zawiera następujące sekcje:
Tworzenie testu jednostki opartego na danych obejmuje następujące etapy:
Utwórz źródło danych, zawierającą wartości, które można użyć w metodzie badania.Źródłem danych może być dowolnego typu, który jest zarejestrowany na komputerze, który uruchamia test.
Dodawanie prywatnego TestContext pola i publicznego TestContext właściwość do klasy test.
Metoda testu jednostki utworzyć i dodać DataSourceAttribute atrybutu do niego.
Użyj DataRow właściwość indeksująca do pobierania wartości używanych w badaniu.
Metoda badanego
Na przykład załóżmy, że stworzyliśmy:
Rozwiązanie o nazwie MyBank która akceptuje i przetwarzania transakcji dla różnych typów kont.
Projekt w MyBank o nazwie BankDb który zarządza transakcji dla kont.
Klasa o nazwie Maths w DbBank projektu, który wykonuje funkcje matematyczne, aby zapewnić, że każda transakcja jest korzystne dla banku.
Projekt o nazwie testów jednostkowych BankDbTests do testowania zachowania BankDb składnika.
Testów jednostkowych klasy o nazwie MathsTests , aby sprawdzić działanie Maths klasy.
Będziemy testować metody w Maths która dodaje dwie liczby całkowite, przy użyciu pętli:
public int AddIntegers(int first, int second)
{
int sum = first;
for( int i = 0; i < second; i++)
{
sum += 1;
}
return sum;
}
Tworzenie źródła danych
Aby przetestować AddIntegers metoda, możemy utworzyć źródło danych, który określa zakres wartości dla parametrów oraz kwoty, które mają być zwrócone.W omawianym przykładzie tworzymy bazy danych Sql CD o nazwie MathsData i tabela o nazwie AddIntegersData zawierający następujące nazwy kolumn i wartości
FirstNumber |
SecondNumber |
Suma |
---|---|---|
0 |
1 |
1 |
1 |
1 |
2 |
2 |
-3 |
-1 |
Dodawanie TestContext do klasy test
Tworzy struktury testowej jednostki TestContext obiekt, aby przechowywać informacje o źródle danych dla badań opartych na danych.Następnie ustawia ten obiekt jako wartość w ramach TestContext właściwość, która tworzymy.
private TestContext testContextInstance;
public TestContext TestContext
{
get { return testContextInstance; }
set { testContextInstance = value; }
}
W swojej metodzie badania, można uzyskać dostęp do danych za pośrednictwem DataRow właściwość indeksująca z TestContext.
Pisanie metody badania
Metodę badania dla AddIntegers jest dość proste.Dla każdego wiersza w źródle danych, nazywamy AddIntegers z FirstNumber i SecondNumber kolumna wartości jako parametry i sprawdzić wartość zwracana przeciwko Suma wartość kolumny:
[DataSource(@"Provider=Microsoft.SqlServerCe.Client.4.0; Data Source=C:\Data\MathsData.sdf;", "Numbers")]
[TestMethod()]
public void AddIntegers_FromDataSourceTest()
{
var target = new Maths();
// Access the data
int x = Convert.ToInt32(TestContext.DataRow["FirstNumber"]);
int y = Convert.ToInt32(TestContext.DataRow["SecondNumber"]);
int expected = Convert.ToInt32(TestContext.DataRow["Sum"]);
int actual = target.IntegerMethod(x, y);
Assert.AreEqual(expected, actual,
"x:<{0}> y:<{1}>",
new object[] {x, y});
}
Należy zauważyć, że Assert metoda zawiera komunikat, który wyświetla x i y wartości iteracji nie powiodło się.Domyślnie, wartości rzekoma, expected i actual, zostały już uwzględnione w szczegóły testu nie powiodło się.
Określanie DataSourceAttribute
DataSource Atrybut określa ciąg połączenia dla źródła danych i nazwę tabeli, której używasz w metodzie badania.Dokładne informacje w ciąg połączenia różni się w zależności od tego, jakiego rodzaju źródła danych używasz.W tym przykładzie użyliśmy bazy danych SqlServerCe.
[DataSource(@"Provider=Microsoft.SqlServerCe.Client.4.0;Data Source=C:\Data\MathsData.sdf", "AddIntegersData")]
Atrybut źródła danych ma trzy konstruktorów.
[DataSource(dataSourceSettingName)]
Konstruktor z jednym parametrem używa informacji o połączeniu, który jest przechowywany w pliku app.config dla rozwiązania.dataSourceSettingsName Jest nazwą elementu Xml w pliku konfiguracyjnym, który określa informacje o połączeniu.
Przy użyciu pliku app.config pozwala zmienić lokalizację źródła danych bez wprowadzania zmian do samego testu jednostki.Aby uzyskać informacje dotyczące tworzenia i używania pliku app.config ZobaczWskazówki: korzystanie z pliku konfiguracji do określania źródła danych
[DataSource(connectionString, tableName)]
DataSource Konstruktor z dwoma parametrami Określa ciąg połączenia dla źródła danych i nazwę tabeli, która zawiera dane dla metody badania.
Ciągi połączeń zależą od typu Typ źródła danych, ale powinien zawierać element dostawca, który określa nazwę niezmienny dostawcy danych.
[DataSource(
dataProvider,
connectionString,
tableName,
dataAccessMethod
)]
Aby uzyskać dostęp do danych za pomocą TestContext.DataRow
Dostęp do danych w AddIntegersData tabeli, użyj TestContext.DataRow indeksatora.DataRowjest DataRow obiektu, więc możemy pobrać wartości kolumny według nazwy indeksu lub kolumny.Ponieważ wartości są zwracane jako obiekty, należy przekonwertować je na odpowiedni typ:
int x = Convert.ToInt32(TestContext.DataRow["FirstNumber"]);
Uruchamianie testu i wyświetlanie wyników
Po zakończeniu pisania metoda badania zbudować projekt testowy.Metody badania pojawia się w oknie Eksploratora przetestować w Nie uruchomić testy grupy.Jak uruchomić, zapisać i ponownie uruchom testy Test Explorer wyświetla wyniki w grupach Failed testów, Przeszedł testy, i Nie uruchomić testy.Można wybrać Uruchom wszystkie, aby uruchomić wszystkie testy lub wybrać Uruchom..., aby wybrać podzbiór testów do uruchomienia.
Animowany pasek wyników testu na górze Eksploratora jako test działa.Na koniec badania pasek będzie Jeśli wszystkie testy minęło dopuszcza się zielone lub czerwone Jeśli jakikolwiek z testów nie powiodła się.Podsumowanie testu pojawia się w okienku szczegółów u dołu okna programu Test Explorer.Wybierz test, aby wyświetlić szczegóły tego testu w dolnym okienku.
Jeśli uruchomiono AddIntegers_FromDataSourceTest metoda w naszym przykładzie pasek wyników zmieni kolor na czerwony i metody badania jest przenoszona do Failed testów badań opartych na danych nie powiedzie się, jeśli źródło dowolnej z metod iterowany z danych kończy się niepowodzeniem.Po wybraniu negatywnym opartych na danych w oknie Eksploratora Test, w okienku szczegółów są wyświetlane wyniki każdej iteracji, który jest identyfikowany przez indeks wiersza danych.W naszym przykładzie, wydaje się, że AddIntegers algorytm nie obsługuje poprawnie żadnych wartości ujemnych.
Kiedy metoda badany jest usuwana i badania Uruchom ponownie pasek wyników zmieni kolor na zielony i metody badania jest przenoszona do Przeszedł Test grupy.
Zobacz też
Informacje
Koncepcje
Weryfikowanie kodu przy użyciu testów jednostkowych
Inne zasoby
Jak: Utwórz i uruchom Test jednostki
Przeprowadzanie testów jednostkowych za pomocą narzędzia Eksplorator testów