Delen via


Scripts in SQL Server-eenheidstests

Elke SQL Server unit-test bevat één voorafgaande testactie, testactie en actie na de test. Elk van deze acties bevat:

  • Een Transact-SQL script dat wordt uitgevoerd op een database.
  • Nul of meer testvoorwaarden die de resultaten evalueren die zijn geretourneerd door de uitvoering van het script.

Het Transact-SQL testscript in de testactie is het enige onderdeel dat u moet opnemen in elke SQL Server-eenheidstest. Naast het testscript zelf wilt u waarschijnlijk ook testvoorwaarden opgeven om te controleren of het testscript de waarde of set waarden heeft geretourneerd die u had verwacht. De testactie oefent of wijzigt een bepaald object in die database en evalueert die wijziging.

Voor elke testactie kunt u één actie vóór de test en één actie na de test opnemen. Net als bij de testactie bevat elke testactie en elke actie na de test één Transact-SQL script en nul of meer testvoorwaarden. U kunt een testactie gebruiken om ervoor te zorgen dat de database een status heeft waarmee uw testactie zinvolle resultaten kan uitvoeren en retourneren. U kunt bijvoorbeeld een actie vooraf testen om te controleren of een tabel gegevens bevat voordat het testscript een bewerking op die gegevens uitvoert.

Nadat de testactie de database voorbereidt en de testactie zinvolle resultaten retourneert, kan de actie na de test worden gebruikt om de database te retourneren naar de status waarin deze zich bevond voordat de testactie werd uitgevoerd. Of in sommige gevallen kunt u de actie na de test gebruiken om de resultaten van de testactie te valideren. Dit komt doordat de actie na de test meer databasebevoegdheden kan hebben dan de testactie. Zie Overzicht van verbindingsreeksen en machtigingen voor meer informatie.

Naast deze drie acties zijn er ook twee testscripts (ook wel algemene scripts genoemd), die vóór en na elke testuitvoering van sql Server-eenheden worden uitgevoerd. Als gevolg hiervan kunnen maximaal vijf Transact-SQL scripts worden uitgevoerd tijdens het uitvoeren van één SQL Server-eenheidstest. Alleen het Transact-SQL script dat zich in de testactie bevindt, is vereist; de algemene scripts en de scripts voor de actie vooraf en na de test zijn optioneel.

De volgende tabel bevat een volledige lijst met scripts die zijn gekoppeld aan een SQL Server-eenheidstest.

Handeling Scripttype Description
TestInitialize Standaard script (initialisatie) (Optioneel) Dit script gaat vooraf aan alle pre-test- en testacties in de eenheidstest. Het Script TestInitialize wordt uitgevoerd vóór elke eenheidstest in een bepaalde testklasse. Dit script wordt uitgevoerd binnen een geprivilegieerde context.
Test vooraf Testscript (Optioneel) Dit script maakt deel uit van de eenheidstest. Het pre-testscript wordt uitgevoerd vóór de testactie binnen een unittest. Dit script wordt uitgevoerd binnen een geprivilegieerde context.
Test Testscript (Vereist) Dit script maakt deel uit van de eenheidstest. Met dit script kunt u bijvoorbeeld een opgeslagen procedure uitvoeren waarmee tabelwaarden worden opgehaald, ingevoegd of bijgewerkt. Dit script wordt uitgevoerd met behulp van de uitvoeringscontext.
Post-testfase Testscript (Optioneel) Dit script maakt deel uit van de eenheidstest. Het post-tests script wordt uitgevoerd na een afzonderlijke unittest. Dit script wordt uitgevoerd binnen een geprivilegieerde context.
TestCleanup Algemeen script (opschonen) (Optioneel) Dit script volgt de eenheidstest. Het TestCleanup-script wordt uitgevoerd na alle eenheidstests in een bepaalde testklasse. Dit script wordt uitgevoerd binnen een geprivilegieerde context.

Zie Overzicht van verbindingsreeksen en machtigingen voor meer informatie over de verschillende beveiligingscontexten waarin elk van deze scripts wordt uitgevoerd. U kunt ook de sectie over machtigingen voor eenheidstests van SQL Server bekijken in vereiste machtigingen voor SQL Server Data Tools.

Volgorde waarin scripts worden uitgevoerd

Het is belangrijk om inzicht te krijgen in de volgorde waarin elk script wordt uitgevoerd. Hoewel u die volgorde niet kunt wijzigen, kunt u bepalen welke scripts u wilt uitvoeren. De volgende afbeelding bevat de selectie van scripts die u kunt gebruiken in een testuitvoering die twee SQL Server-eenheidstests bevat en toont de volgorde waarin ze worden uitgevoerd:

Diagram van twee database-eenheidstests.

Opmerking

Als de implementatie van het SQL Server-databaseproject is geconfigureerd, vindt deze stap plaats aan het begin van de testuitvoering, onder de verbindingsreeks met bevoorrechte context. Zie Instructies voor het configureren van de testuitvoering van SQL Server-eenheden voor meer informatie.

Initialisatie- en opschoonscripts

In de SQL Server Unit Test Designer worden de Scripts TestInitialize en TestCleanup de algemene scripts genoemd. In het eerdere voorbeeld wordt ervan uitgegaan dat de twee eenheidstests deel uitmaken van dezelfde testklasse. Als gevolg hiervan delen ze dezelfde TestInitialize- en TestCleanup-scripts. Voor alle eenheidstests binnen één testklasse is dit altijd het geval. Als uw testuitvoering echter eenheidstests uit verschillende testklassen bevat, worden de algemene scripts van de gerelateerde testklasse uitgevoerd vóór en na de eenheidstestuitvoering.

Als u eenheidstests alleen schrijft met behulp van de SQL Server Unit Test Designer, bent u mogelijk niet bekend met het concept van een testklasse. Telkens wanneer u een eenheidstest maakt door het menu Testen te openen en Nieuwe test te selecteren, genereert SQL Server Data Tools een testklasse. Testklassen worden weergegeven in Solution Explorer met de testnaam die u hebt opgegeven, gevolgd door een .cs of .vb extensie. Binnen elke testklasse worden afzonderlijke eenheidstests opgeslagen als testmethoden. Ongeacht het aantal testmethoden (dat wil gezegd eenheidstests) kan elke testklasse echter nul of één TestInitialize- en TestCleanup-scripts hebben.

U kunt het TestInitialize-script gebruiken om de testdatabase voor te bereiden en u kunt het TestCleanup-script gebruiken om de testdatabase te retourneren naar een bekende status. U kunt bijvoorbeeld TestInitialize gebruiken om een opgeslagen helperprocedure te maken die u later in het testscript uitvoert om een andere opgeslagen procedure te testen.

Scripts vooraf testen en na testen

De scripts die zijn gekoppeld aan pre-test- en posttestacties, verschillen waarschijnlijk van de ene eenheidstest tot de volgende. U kunt deze scripts gebruiken om incrementele wijzigingen in de database tot stand te brengen en deze wijzigingen vervolgens op te schonen.