Delen via


Testvoorwaarden gebruiken in SQL Server-eenheidstests

In een SQL Server-eenheidstest worden een of meer Transact-SQL testscripts uitgevoerd. De resultaten kunnen worden geëvalueerd in het Transact-SQL script en THROW of RAISERROR worden gebruikt om een fout te retourneren en de test te mislukken, of testvoorwaarden kunnen worden gedefinieerd in de test om de resultaten te evalueren. De test retourneert een exemplaar van de klasse SqlExecutionResult . Het exemplaar van deze klasse bevat een of meer DataSets, de uitvoeringstijd en de rijen waarop het script betrekking heeft. Al deze informatie wordt verzameld tijdens het uitvoeren van het script. Deze resultaten kunnen worden geëvalueerd met behulp van testvoorwaarden. SQL Server Data Tools biedt een set vooraf gedefinieerde testvoorwaarden. U kunt ook aangepaste voorwaarden maken en gebruiken; zie Aangepaste testvoorwaarden voor SQL Server-eenheidstests.

Vooraf gedefinieerde testvoorwaarden

De volgende tabel bevat de vooraf gedefinieerde testvoorwaarden die u kunt toevoegen met behulp van het deelvenster Testvoorwaarden voor SQL Server-eenheden in de testontwerper voor SQL Server-eenheden.

Testvoorwaarde Beschrijving van testvoorwaarde
Gegevenscontrolesom Mislukt als de controlesom van de resultatenset die is geretourneerd uit het Transact-SQL script niet overeenkomt met de verwachte controlesom. Voor meer informatie, zie Een gegevenscontrolesom opgeven.

Notitie: Deze testvoorwaarde wordt niet aanbevolen als u gegevens retourneert die variëren tussen testuitvoeringen. Als uw resultatenset bijvoorbeeld gegenereerde datums of tijden bevat of identiteitskolommen bevat, mislukken uw tests omdat de controlesom voor elke uitvoering anders is.
Lege ResultSet Mislukt als de resultatenset die wordt geretourneerd uit het Transact-SQL script niet leeg is.
Uitvoeringstijd Mislukt als het Transact-SQL testscript langer duurt dan verwacht om uit te voeren. De standaard uitvoeringstijd is 30 seconden.

De uitvoeringstijd is alleen van toepassing op de testscripttest, niet op het pretestscript of het script na de test.
Verwacht schema Mislukt als de kolommen en gegevenstypen van de resultatenset niet overeenkomen met de kolommen en gegevenstypen die zijn opgegeven voor de testvoorwaarde. U moet een schema opgeven via de eigenschappen van de testvoorwaarde. Zie Een verwacht schema opgeven voor meer informatie.
Twijfelachtig Levert altijd een test op met een onbeslist resultaat. Dit is de standaardvoorwaarde die aan elke test wordt toegevoegd. Deze testvoorwaarde is opgenomen om aan te geven dat testverificatie niet is geïmplementeerd. Verwijder deze testvoorwaarde uit uw test nadat u andere testvoorwaarden hebt toegevoegd.
Niet leeg ResultSet Mislukt als de resultatenset leeg is. U kunt deze testvoorwaarde of de EmptyResultSet gebruiken met de functie Transact-SQL @@RAISERROR in uw testscript om te testen of een update correct werkte. U kunt bijvoorbeeld waarden vóór bijwerken opslaan, de update uitvoeren, waarden na bijwerken vergelijken en een fout genereren als u de verwachte resultaten niet krijgt.
Aantal rijen Mislukt als de resultatenset niet het verwachte aantal rijen bevat.
Scalaire waarde Mislukt als een bepaalde waarde in de resultatenset niet gelijk is aan de opgegeven waarde. De standaard Verwachte waarde is null.

De testvoorwaarde Uitvoeringstijd geeft een tijdslimiet op waaronder het Transact-SQL testscript moet worden uitgevoerd. Als deze tijdslimiet wordt overschreden, mislukt de test. Testresultaten bevatten ook een duurstatistiek, die verschilt van de testvoorwaarde Uitvoeringstijd. De duurstatistiek omvat niet alleen de uitvoeringstijd, maar ook de tijd om twee keer verbinding te maken met de database; de tijd voor het uitvoeren van andere testscripts, zoals het pretestscript en het posttestscript; en de tijd om de testvoorwaarden uit te voeren. Daarom kan een test slagen, zelfs als de duur langer is dan de uitvoertijd.

De gerapporteerde duur bevat geen tijd die wordt gebruikt voor het genereren van gegevens en schema-implementatie, omdat deze plaatsvinden voordat de tests worden uitgevoerd. Als u de testduur wilt bekijken, selecteert u een testuitvoering in het venster Testresultaten , klikt u met de rechtermuisknop en kiest u Testresultaten weergeven.

U kunt testvoorwaarden toevoegen aan SQL Server-eenheidstests met behulp van het deelvenster Testvoorwaarden voor SQL Server Unit Test Designer. Zie Voor meer informatie : Testvoorwaarden toevoegen aan SQL Server-eenheidstests.

U kunt uw testmethodecode ook rechtstreeks bewerken om meer functionaliteit toe te voegen. Voor meer informatie, zie Hoe te: Open een SQL Server Unit Test om te bewerken en Hoe te: Een SQL Server Unit Test schrijven die wordt uitgevoerd binnen de scope van een enkele transactie. U kunt bijvoorbeeld functionaliteit toevoegen aan een testmethode door Assert-instructies toe te voegen. Zie Use Transact-SQL assertions in SQL Server unit tests (Use Transact-SQL assertions in SQL Server unit tests) voor meer informatie.

Verwachte fouten

U kunt SQL Server-eenheidstests maken om het gedrag te testen dat niet zou moeten slagen. Deze verwachte fouten worden soms aangeduid als negatief testen. Enkele voorbeelden zijn:

  • Controleer of een opgeslagen procedure waarmee de gegevens van een klant worden verwijderd, mislukt als u een ongeldige klant-id opgeeft.
  • Controleer of een opgeslagen procedure die een order vult, mislukt als de bestelling nooit is geplaatst of als de bestelling al is ingevuld.
  • Controleer of een opgeslagen procedure die een order annuleert, voltooide orders of orders die al zijn geannuleerd, niet kan annuleren.

U kunt SQL Server-eenheidstests definiëren voor opgeslagen procedures die verwachte uitzonderingen genereren. U kunt een kenmerk toevoegen aan de eenheidstestmethode om aan te geven welke uitzondering of uitzonderingen worden verwacht. Door dit te doen, voorkomt u dat de test mislukt wanneer de uitzondering optreedt.

Als u een testmethode voor SQL Server-eenheden wilt markeren met verwachte uitzonderingen, voegt u het volgende kenmerk toe:

[ExpectedSqlException(MessageNumber = nnnnn, Severity = x, MatchFirstError = false, State = y)]

Where:

  • nnnnn is het nummer van het verwachte bericht, bijvoorbeeld 14025
  • x is de ernst van de verwachte uitzondering
  • y is de status van de verwachte uitzondering

Niet-opgegeven parameters worden genegeerd. U geeft deze parameters door aan de THROW instructie in uw databasecode. Als u MatchFirstError = false opgeeft, komt het kenmerk overeen met een van de SqlErrors in de uitzondering. Het standaardgedrag (MatchFirstError = true) beperkt zich tot enkel de eerste fout verwerken die zich voordoet.

Zie Walkthrough: Een SQL Server-eenheidstest maken en uitvoeren voor een voorbeeld van het gebruik van verwachte uitzonderingen en een negatieve SQL Server-eenheidstest.

Geef een gegevenscontrolesom op

Als u de ontwerpfunctie voor SQL Server-eenheidstests wilt weergeven, dubbelklikt u op het broncodebestand voor de eenheidstest in Solution Explorer.

Nadat u een testvoorwaarde voor Data Checksum aan uw database-eenheidstest hebt toegevoegd, moet u de verwachte controlesom configureren met behulp van de volgende procedure:

Geef een verwachte controlesom op

  1. Selecteer in de lijst met testvoorwaarden de testvoorwaarde Data Checksum waarvoor u een controlesom wilt opgeven.

  2. Open het venster Eigenschappen door op F4 te drukken. U kunt ook het menu Beeld openen en het venster Eigenschappen selecteren.

  3. (Optioneel) Mogelijk wilt u de eigenschap (Naam) van de testvoorwaarde wijzigen zodat deze meer beschrijvend is.

  4. Selecteer in de eigenschap Configuratie de knop Bladeren (...).

    Het dialoogvenster Configuration for TestConditionName wordt weergegeven.

  5. Geef een verbinding op met de database die u wilt testen. Zie Een databaseverbinding maken voor meer informatie.

  6. De Transact-SQL hoofdtekst van de test wordt standaard weergegeven in het bewerkingsvenster. U kunt de code zo nodig wijzigen om de verwachte resultaten te produceren. Als uw test bijvoorbeeld code bevat in de pre-test, moet u die code mogelijk toevoegen.

    Belangrijk

    Als u een controlesomvoorwaarde wijzigt waarvoor u eerder een controlesom hebt opgegeven, worden alle wijzigingen die u in het bewerkingsvenster hebt aangebracht, niet opgeslagen. U moet deze wijzigingen opnieuw aanbrengen voordat u Ophalen selecteert.

  7. Selecteer Ophalen.

    De Transact-SQL wordt uitgevoerd voor de opgegeven databaseverbinding en de resultaten worden weergegeven in het dialoogvenster.

  8. Als de resultaten overeenkomen met de verwachte resultaten van uw test, selecteert u OK. Wijzig anders de Transact-SQL hoofdtekst en herhaal stap 6, 7 en 8 totdat de resultaten zijn zoals verwacht.

    In de kolom Waarde van de testvoorwaarde wordt de waarde van de verwachte controlesom weergegeven.

Een verwacht schema opgeven

Nadat u een testvoorwaarde verwacht schema hebt toegevoegd aan uw SQL Server-eenheidstest, moet u het verwachte schema configureren met behulp van de volgende procedure:

Verwacht schema opgeven

  1. Selecteer in de lijst met testvoorwaarden de testvoorwaarde Verwacht schema waarvoor u een schema wilt opgeven.

  2. Open het venster Eigenschappen door op F4 te drukken. U kunt ook het menu Beeld openen en het venster Eigenschappen selecteren.

  3. (Optioneel) Mogelijk wilt u de eigenschap (Naam) van de testvoorwaarde wijzigen zodat deze meer beschrijvend is.

  4. Selecteer in de eigenschap Configuratie de knop Bladeren (...).

    Het dialoogvenster Configuration for TestConditionName wordt weergegeven.

  5. Geef een verbinding op met de database die u wilt testen. Zie Een databaseverbinding maken voor meer informatie.

  6. De Transact-SQL hoofdtekst van de test wordt standaard weergegeven in het bewerkingsvenster. U kunt de code zo nodig wijzigen om de verwachte resultaten te produceren. Als uw test bijvoorbeeld code bevat in de pre-test, moet u die code mogelijk toevoegen.

    Belangrijk

    Als u een verwachte schemavoorwaarde wijzigt waarvoor u eerder een schema hebt opgegeven, worden wijzigingen die u in het bewerkingsvenster hebt aangebracht, niet opgeslagen. U moet deze wijzigingen opnieuw aanbrengen voordat u Ophalen selecteert.

  7. Selecteer Ophalen.

    De Transact-SQL wordt uitgevoerd voor de opgegeven databaseverbinding en de resultaten worden weergegeven in het dialoogvenster. Omdat u het schema of de vorm van de resultatenset controleert en niet de waarden van de resultaten, hoeft u geen gegevens te zien in de geretourneerde resultaten, zolang de kolommen worden weergegeven zoals u verwacht dat ze worden weergegeven.

  8. Als de resultaten overeenkomen met de verwachte resultaten van uw test, selecteert u OK. Wijzig anders de Transact-SQL hoofdtekst en herhaal stap 6, 7 en 8 totdat de resultaten zijn zoals verwacht.

    In de kolom Waarde van de testvoorwaarde wordt informatie weergegeven over het verwachte schema. Bijvoorbeeld: "Verwacht: 2 tabellen".

Uitbreidbare testvoorwaarden

Naast de zes vooraf gedefinieerde testvoorwaarden kunt u zelf nieuwe testvoorwaarden schrijven. Deze testvoorwaarden worden weergegeven in het deelvenster Testvoorwaarden van de SQL Server Unit Test Designer. Zie Aangepaste testvoorwaarden voor SQL Server-eenheidstests voor meer informatie.