Sdílet prostřednictvím


Gewusst wie: Hinzufügen einer Testbedingung im Datenbankkomponententest-Designer

Aktualisiert: November 2007

Die TestCondition-Klasse, die zum Erstellen von Testbedingungen verwendet wird, ist vollständig erweiterbar. Im folgenden Verfahren wird das Erstellen einer Testbedingung erläutert, die im Datenbankkomponententest-Designer angezeigt wird.

So erstellen Sie eine Testbedingung

  1. Erstellen Sie in Visual Studio ein Klassenbibliotheksprojekt.

  2. Fügen Sie einen Verweis auf die folgende Assembly hinzu:

    • Microsoft.VisualStudio.TeamSystem.Data.UnitTesting.dll.

    Zum Hinzufügen dieser Datei müssen Sie zu [Programme]\Microsoft Visual Studio 9.0\DBPro navigieren. [Programme] stellt dabei den Ordner Programme dar.

  3. Leiten Sie die Klasse von der TestCondition-Klasse ab, wie im folgenden Codebeispiel dargestellt:

    using Microsoft.VisualStudio.TeamSystem.Data.UnitTesting.Conditions;
    using System.ComponentModel;
    
    [DisplayName("NewTestCondition")]
    public class NewTestCondition:TestCondition
    {
       // Additional implementation to be added here
    }
    
  4. Signieren Sie die Assembly mit einem starkem Namen. Weitere Informationen finden Sie unter Gewusst wie: Signieren einer Assembly mit einem starken Namen.

  5. Erstellen Sie die Klassenbibliothek.

  6. Fügen Sie die Assembly mit gacutil /i dem globalen Assemblycache hinzu. Weitere Informationen finden Sie unter Global Assembly Cache-Tool (Gacutil.exe).

    Aa833409.alert_note(de-de,VS.90).gifHinweis:

    Bevor Sie den Befehl gacutil ausführen, führen Sie ihn im Eingabeaufforderungsfenster in Visual Studio 2005 aus. Klicken Sie zum Öffnen dieses Fensters auf Start, zeigen Sie auf Alle Programme, zeigen Sie auf Microsoft Visual Studio 2005, und klicken Sie dann auf Visual Studio-Tools. Wenn Sie das Standard-Eingabeaufforderungsfenster verwenden, müssen Sie die PATH-Umgebungsvariable so ändern, dass sie auf den Speicherort von gacutil.exe zeigt. Normalerweise lautet der Speicherort [Programme]\Microsoft Visual Studio 9.0\SDK\v2.0\Bin.

  7. Registrieren Sie die neue Testbedingung. Weitere Informationen finden Sie unter Gewusst wie: Registrieren einer neuen Testbedingung.

Beispiel

In diesem Beispiel erstellen Sie eine einfache Testbedingung, die überprüft, ob die Anzahl der in ResultSet zurückgegebenen Spalten dem erwarteten Wert entspricht. Mit dieser Bedingung können Sie sicherstellen, dass der Vertrag für eine gespeicherte Prozedur richtig ist.

//ResultSetColumnCountCondition
//Sample custom test condition
//

using System;
using System.Collections.Generic;
using System.Text;

using System.Data;
using System.Data.Common;
using System.ComponentModel;
using System.ComponentModel.Design;
using TestTools = Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VisualStudio.TeamSystem.Data.UnitTesting;
using Microsoft.VisualStudio.TeamSystem.Data.UnitTesting.Conditions;

namespace MyTestConditions
{
    [DisplayName("ResultSet Column Count")]
    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, ExecutionResult[] results)
        {
            //call base for parameter validation
            base.Assert(validationConnection, results);

            //verify batch exists
            if (results.Length < _batch)
                throw new TestTools.AssertFailedException(String.Format("Batch {0} does not exist", _batch));

            ExecutionResult result = results[_batch - 1];

            //verify resultset exists
            if (result.DataSet.Tables.Count < ResultSet)
                throw new TestTools.AssertFailedException(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 TestTools.AssertFailedException(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
    }
}

Die Klasse für die benutzerdefinierte Testbedingung erbt von der TestCondition-Basisklasse. Wegen der zusätzlichen Eigenschaften bei der benutzerdefinierten Testbedingung können Benutzer die Bedingung nach erfolgter Registrierung über das Eigenschaftenfenster konfigurieren. In diesem Beispiel fügen Sie zwei Eigenschaften hinzu. Benutzer der benutzerdefinierten Testbedingung können mit der ResultSet-Eigenschaft angeben, für welches Resultset die Spaltenanzahl überprüft werden soll. Sie können mit der Count-Eigenschaft die erwartete Spaltenanzahl angeben. Drei Attribute werden für jede Eigenschaft hinzugefügt:

  • Der Kategoriename, der die Organisation der Eigenschaften unterstützt.

  • Der Anzeigename der Eigenschaft.

  • Eine Beschreibung der Eigenschaft.

Es wird eine grundlegende Validierung der Eigenschaften ausgeführt, um sicherzustellen, dass der Wert der ResultSet-Eigenschaft nicht kleiner als 1 und der Wert der Count-Eigenschaft nicht größer als 0 (null) ist.

Die Assert-Methode führt die primäre Aufgabe der Testbedingung aus. Sie überschreiben diese Methode, um zu überprüfen, dass die erwartete Bedingung erfüllt wird. Diese Methode stellt zwei Parameter bereit:

  • Der erste Parameter ist die Datenbankverbindung, die verwendet wird, um die Testbedingung zu überprüfen.

  • Der zweite und wichtigste Parameter ist das Ergebnisarray, das ein einzelnes Arrayelement für jeden ausgeführten Batch zurückgibt. In dieser Version wird nur ein einzelner Batch für jedes Testskript unterstützt. Deshalb untersucht die Testbedingung immer das erste Arrayelement. Das Arrayelement enthält ein DataSet, das die für das Testskript zurückgegebenen Resultsets enthält. In diesem Beispiel überprüft der Code, ob die Datentabelle im DataSet die entsprechende Anzahl von Spalten enthält. Weitere Informationen finden Sie unter DataSet.

Sie müssen festlegen, dass die Klassenbibliothek, die Ihre Testbedingung enthält, signiert wird. Diese Einstellung können Sie in den Projekteigenschaften auf der Registerkarte Signierung vornehmen.

Siehe auch

Aufgaben

Gewusst wie: Registrieren einer neuen Testbedingung