Skrypty w testach jednostkowych programu SQL Server

Każdy test jednostkowy programu SQL Server zawiera jedną akcję przed testową, akcję testową i akcję po teście. Każda z tych akcji z kolei zawiera:

  • Skrypt Transact-SQL wykonywany w bazie danych.
  • Zero lub więcej warunków testowych, które oceniają wyniki zwrócone z wykonania skryptu.

Skrypt testowy Transact-SQL w akcji testowej jest jedynym składnikiem, który należy uwzględnić w każdym teście jednostkowym programu SQL Server. Oprócz samego skryptu testowego prawdopodobnie chcesz również określić warunki testu, aby sprawdzić, czy skrypt testowy zwrócił wartość lub zestaw oczekiwanych wartości. Akcja testowa wykonuje ćwiczenia lub zmienia określony obiekt w tej bazie danych, a następnie ocenia zmianę.

Dla każdej akcji testowej można uwzględnić jedną akcję przed testową i jedną akcję po teście. Podobnie jak akcja testowa, każda akcja przed testem i każda akcja po teście zawiera jeden skrypt Transact-SQL i zero lub więcej warunków testu. Możesz użyć działania wstępnego, aby upewnić się, że baza danych znajduje się w stanie, który umożliwia uruchomienie akcji testowej i zwrócenie znaczących wyników. Na przykład można użyć akcji wstępnej do sprawdzenia, czy tabela zawiera dane przed wykonaniem operacji na tych danych przez skrypt testowy.

Po tym, jak akcja przed testem przygotuje bazę danych, a akcja testowa zwróci znaczące wyniki, można użyć akcji po teście, aby zwrócić bazę danych do stanu, w którym znajdowała się przed uruchomieniem akcji przed testem. W niektórych przypadkach możesz też użyć akcji po przetestowaniu, aby zweryfikować wyniki akcji testowej. Jest to spowodowane tym, że akcja po przetestowaniu może mieć większe uprawnienia bazy danych niż akcja testowa. Aby uzyskać więcej informacji, zobacz Omówienie parametrów połączenia i uprawnień.

Oprócz tych trzech akcji istnieją również dwa skrypty testowe (nazywane typowymi skryptami), które są uruchamiane przed i po każdym uruchomieniu testu jednostkowego programu SQL Server. W związku z tym podczas wykonywania jednego testu jednostkowego programu SQL Server można uruchamiać maksymalnie pięć skryptów Transact-SQL. Wymagany jest tylko skrypt Transact-SQL zawarty w akcji testowej; typowe skrypty oraz skrypty akcji przed testowaniem i po przetestowaniu są opcjonalne.

Poniższa tabela zawiera pełną listę skryptów skojarzonych z dowolnym testem jednostkowym programu SQL Server.

Akcja Typ skryptu Description
InicjalizacjaTestu Wspólny skrypt (inicjalizacja) (Opcjonalnie) Ten skrypt poprzedza wszystkie akcje przedtestowe i testowe w teście jednostkowym. Skrypt TestInitialize jest uruchamiany przed każdym testem jednostkowym w danej klasie testowej. Ten skrypt jest wykonywany przy użyciu kontekstu uprzywilejowanego.
Test wstępny Skrypt testowy (Opcjonalnie) Ten skrypt jest częścią testu jednostkowego. Skrypt przedtestowy jest uruchamiany przed akcją testową w ramach testu jednostkowego. Ten skrypt jest wykonywany przy użyciu kontekstu uprzywilejowanego.
Test Skrypt testowy (Wymagane) Ten skrypt jest częścią testu jednostkowego. Ten skrypt może na przykład uruchomić procedurę składowaną, która pobiera, wstawia lub aktualizuje wartości tabeli. Ten skrypt jest uruchamiany w kontekście wykonawczym.
Po teście Skrypt testowy (Opcjonalnie) Ten skrypt jest częścią testu jednostkowego. Skrypt po przetestowaniu jest uruchamiany po pojedynczym teście jednostkowym. Ten skrypt jest wykonywany przy użyciu kontekstu uprzywilejowanego.
TestCleanup Wspólny skrypt (optymalizacja) (Opcjonalnie) Ten skrypt jest zgodny z testem jednostkowym. Skrypt TestCleanup jest uruchamiany po wszystkich testach jednostkowych w danej klasie testowej. Ten skrypt jest wykonywany przy użyciu kontekstu uprzywilejowanego.

Aby uzyskać więcej informacji na temat różnych kontekstów zabezpieczeń, w których są wykonywane poszczególne skrypty, zobacz Omówienie parametrów połączenia i uprawnień. Możesz również przejrzeć sekcję Uprawnienia testowania jednostkowego programu SQL Server w sekcji Wymagane uprawnienia dla narzędzi SQL Server Data Tools.

Kolejność uruchamiania skryptów

Ważne jest, aby zrozumieć kolejność uruchamiania każdego skryptu. Chociaż nie można zmienić tej kolejności, możesz zdecydować, które skrypty chcesz uruchomić. Poniższa ilustracja zawiera wybór skryptów, których można użyć w przebiegu testowym zawierającym dwa testy jednostkowe programu SQL Server i pokazuje kolejność uruchamiania:

Diagram dwóch testów jednostkowych bazy danych.

Uwaga / Notatka

Jeśli wdrożenie projektu bazy danych programu SQL Server jest skonfigurowane, ten krok występuje na początku przebiegu testu w obszarze uprzywilejowanych parametrów połączenia kontekstu. Aby uzyskać więcej informacji, zobacz How to: Configure SQL Server unit test execution (Jak skonfigurować wykonywanie testów jednostkowych programu SQL Server).

Inicjowanie i oczyszczanie skryptów

W projektancie testów jednostkowych programu SQL Server skrypty TestInitialize i TestCleanup są określane jako typowe skrypty. W poprzednim przykładzie przyjęto założenie, że dwa testy jednostkowe są częścią tej samej klasy testowej. W rezultacie współużytkują te same skrypty TestInitialize i TestCleanup. W przypadku wszystkich testów jednostkowych w ramach jednej klasy testowej tak jest zawsze. Jeśli jednak przebieg testu zawiera testy jednostkowe z różnych klas testowych, typowe skrypty skojarzonej klasy testowej są uruchamiane przed i po uruchomieniu testu jednostkowego.

Jeśli piszesz testy jednostkowe tylko przy użyciu projektanta testów jednostkowych programu SQL Server, możesz nie zapoznać się z koncepcją klasy testowej. Za każdym razem, gdy tworzysz test jednostkowy, otwierając menu Test i wybierając pozycję Nowy test, narzędzia SQL Server Data Tools generują klasę testową. Klasy testów są wyświetlane w Eksploratorze rozwiązań z nazwą testu, który określisz, a następnie z rozszerzeniem .cs lub .vb. W każdej klasie testów poszczególne testy jednostkowe są przechowywane jako metody testowe. Jednak niezależnie od liczby metod testowych (czyli testów jednostkowych), każda klasa testowa może mieć zero lub jeden skrypt TestInitialize i TestCleanup.

Skrypt TestInitialize umożliwia przygotowanie testowej bazy danych i użycie skryptu TestCleanup w celu zwrócenia bazy danych testowej do znanego stanu. Na przykład można użyć narzędzia TestInitialize, aby utworzyć procedurę składowaną pomocnika uruchamianą później w skrypce testowym, aby przetestować inną procedurę składowaną.

Skrypty przed testowaniem i po teście

Skrypty skojarzone z akcjami przed testami i po teście mogą się różnić w zależności od jednego testu jednostkowego do następnego. Za pomocą tych skryptów można ustanowić przyrostowe zmiany w bazie danych, a następnie wyczyścić te zmiany.