Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Można użyć rozszerzalnej klasy TestCondition, aby utworzyć nowe warunki testowe. Można na przykład utworzyć nowy warunek testu, który weryfikuje liczbę kolumn lub wartości w zestawie wyników.
Aby utworzyć warunek testu
W tej procedurze wyjaśniono, jak utworzyć warunek testu, który ma być wyświetlany w projektancie testów jednostkowych programu SQL Server.
W programie Visual Studio utwórz projekt biblioteki klas.
W menu projektu kliknij polecenie Dodaj referencję.
Kliknij kartę .NET.
Na liście nazwa składnika wybierz pozycję System.ComponentModel.Composition, a następnie kliknij przycisk OK.
Dodaj wymagane odwołania do asemblii. Kliknij prawym przyciskiem na element projektu, a następnie kliknij Dodaj odwołanie. Kliknij Przeglądaj i przejdź do folderu
C:\Program Files (x86)\Microsoft SQL Server\110\DAC\Bin
. Wybierz Microsoft.Data.Tools.Schema.Sql.dll i kliknij przycisk Dodaj, a następnie kliknij przycisk OK.W menu Project kliknij pozycję Unload Project.
Kliknij prawym przyciskiem myszy projekt w eksploratorze rozwiązań i wybierz pozycję Edytuj nazwę projektu <>.csproj.
Dodaj następujące instrukcje importu po zaimportowaniu pliku Microsoft.CSharp.targets.
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\SSDT\Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets" Condition="'$(VisualStudioVersion)' == ''" /> <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets" Condition="'$(VisualStudioVersion)' != ''" />
Zapisz plik i zamknij go. Kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań i wybierz Załaduj ponownie projekt.
Utwórz klasę z klasy TestCondition.
Podpisz złożenie silną nazwą. Aby uzyskać więcej informacji, zobacz Jak podpisać zestaw przy użyciu silnej nazwy.
Skompiluj bibliotekę klas.
Przed użyciem nowego warunku testu należy skopiować podpisany zestaw do folderu %Program Files%\Microsoft Visual Studio <Version>\Common7\IDE\Extensions\Microsoft\SQLDB\TestConditions. Jeśli ten folder nie istnieje, utwórz go. Do skopiowania do tego katalogu potrzebne są uprawnienia administracyjne na komputerze.
Zainstaluj warunki testowe. Aby uzyskać więcej informacji, zobacz custom test conditions for SQL Server Unit Tests.
Dodaj nowy test jednostkowy programu SQL Server do projektu, aby utworzyć odwołanie do warunku testu, który ma zostać dodany do projektu. Możesz ręcznie dodać odwołanie do zestawu warunku testowego w projekcie. Załaduj ponownie projektanta po tym kroku.
Notatka
Aby utworzyć odwołanie, należy dodać klasę testową. Klasę testową można usunąć po dodaniu odwołania.
W poniższym przykładzie utworzysz prosty warunek testu, który weryfikuje, czy liczba kolumn zwróconych w zbiorze wyników (ResultSet) jest poprawna. Możesz użyć tego prostego warunku testu, aby upewnić się, że kontrakt procedury składowanej jest poprawny.
using System;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using Microsoft.Data.Tools.Schema.Sql.UnitTesting;
using Microsoft.Data.Tools.Schema.Sql.UnitTesting.Conditions;
namespace Ssdt.Samples.SqlUnitTesting
{
[ExportTestCondition("ResultSet Column Count", typeof(ResultSetColumnCountCondition))]
public class ResultSetColumnCountCondition : TestCondition
{
private int _resultSet;
private int _count;
private int _batch;
public ResultSetColumnCountCondition()
{
_resultSet = 1;
_count = 0;
_batch = 1;
}
// method you need to override
// to perform the condition verification
public override void Assert(DbConnection validationConnection, SqlExecutionResult[] results)
{
// call base for parameter validation
base.Assert(validationConnection, results);
// verify batch exists
if (results.Length < _batch)
throw new DataException(String.Format("Batch {0} does not exist", _batch));
SqlExecutionResult result = results[_batch - 1];
// verify resultset exists
if (result.DataSet.Tables.Count < ResultSet)
throw new DataException(String.Format("ResultSet {0} does not exist", ResultSet));
DataTable table = result.DataSet.Tables[ResultSet - 1];
// actual condition verification
// verify resultset column count matches expected
if (table.Columns.Count != Count)
throw new DataException(String.Format(
"ResultSet {0}: {1} columns did not match the {2} columns expected",
ResultSet, table.Columns.Count, Count));
}
// this method is called to provide the string shown in the
// test conditions panel grid describing what the condition tests
public override string ToString()
{
return String.Format(
"Condition fails if ResultSet {0} does not contain {1} columns",
ResultSet, Count);
}
// below are the test condition properties
// that are exposed to the user in the property browser
#region Properties
// property specifying the resultset for which
// you want to check the column count
[Category("Test Condition")]
[DisplayName("ResultSet")]
[Description("ResultSet Number")]
public int ResultSet
{
get { return _resultSet; }
set
{
//basic validation
if (value < 1)
throw new ArgumentException("ResultSet cannot be less than 1");
_resultSet = value;
}
}
// property specifying
// expected column count
[Category("Test Condition")]
[DisplayName("Count")]
[Description("Column Count")]
public int Count
{
get { return _count; }
set
{
//basic validation
if (value < 0)
throw new ArgumentException("Count cannot be less than 0");
_count = value;
}
}
#endregion
}
}
Klasa niestandardowego warunku testowego dziedziczy z bazowej klasy TestCondition. Ze względu na dodatkowe właściwości warunku testu niestandardowego użytkownicy mogą skonfigurować warunek w oknie Właściwości po zainstalowaniu warunku.
ExportTestConditionAttribute należy dodać do klas rozszerzających TestCondition. Ten atrybut umożliwia odnajdywanie klasy przez narzędzia SQL Server Data Tools i używane podczas projektowania i wykonywania testów jednostkowych. Atrybut przyjmuje dwa parametry:
Parametr atrybutu | Pozycja | Opis |
---|---|---|
Nazwa Wyświetlana | 1 | Identyfikuje ciąg w polu rozwijanym "Warunki testu". Ta nazwa musi być unikatowa. Jeśli dwa warunki mają taką samą nazwę wyświetlaną, pierwszy znaleziony warunek zostanie wyświetlony użytkownikowi, a w Menedżerze błędów programu Visual Studio zostanie wyświetlone ostrzeżenie. |
Implementacja typu | 2 | Służy to do unikatowego identyfikowania rozszerzenia. Należy to zmienić, aby było zgodne z typem, na którym umieszczasz atrybut. W tym przykładzie użyto typu ResultSetColumnCountCondition, dlatego użyj typeof(ResultSetColumnCountCondition). Jeśli twój typ to NewTestCondition, użyj typeof(NewTestCondition). |
W tym przykładzie dodasz dwie właściwości. Użytkownicy niestandardowego warunku testu mogą użyć właściwości ResultSet, aby określić, dla którego zestawu wyników należy zweryfikować liczbę kolumn. Następnie użytkownicy mogą użyć właściwości Count, aby określić oczekiwaną liczbę kolumn.
Dla każdej właściwości są dodawane trzy atrybuty:
Nazwa kategorii, która ułatwia organizowanie właściwości.
Nazwa wyświetlana właściwości.
Opis nieruchomości.
Walidacja jest wykonywana we właściwościach, aby sprawdzić, czy wartość właściwości ResultSet nie jest mniejsza niż jedna, a wartość właściwości Count jest większa niż zero.
Metoda Assert wykonuje podstawowe zadanie warunku testu. Zastąpisz metodę Assert, aby sprawdzić, czy oczekiwany warunek jest spełniony. Ta metoda udostępnia dwa parametry:
Pierwszy parametr to połączenie z bazą danych używane do sprawdzania poprawności warunku testu.
Drugim i ważniejszym parametrem jest tablica wyników, która zwraca pojedynczy element tablicy dla każdej wykonanej partii.
Tylko jedna partia jest obsługiwana dla każdego skryptu testowego. W związku z tym warunki testowe zawsze będą badać pierwszy element tablicy. Element tablicy zawiera zestaw danych, który z kolei zawiera zwrócone zestawy wyników dla skryptu testowego. W tym przykładzie kod sprawdza, czy tabela danych w zestawie danych zawiera odpowiednią liczbę kolumn. Aby uzyskać więcej informacji, zobacz Zestaw danych.
Należy skonfigurować bibliotekę klas zawierającą warunek testowy do podpisania, co można zrobić we właściwościach projektu na karcie Podpisywanie.
Zobacz też
niestandardowe warunki testu dla testów jednostkowych programu SQL Server