Freigeben über


Gewusst wie: Bereitstellen von Dateien für Tests

 

Veröffentlicht: Juli 2016

Vor dem Ausführen eines Tests müssen der Test und die Anwendung zusammen mit anderen Assemblys, auf die verwiesen wird, an einen Speicherort kopiert werden, an dem sie ausgeführt werden können. Für einen Test sind in der Regel auch zusätzliche Dateien erforderlich, z. B. Testdaten, Konfigurationsdateien, eine Datenbank und explizit geladene Assemblys. Um diese zusätzlichen Dateien für den Test bereitzustellen, müssen Sie angeben, dass sie bereitgestellt werden.

Wo werden Tests ausgeführt?

Visual Studio kann Tests an mehreren Stellen ausführen:

  • Im Buildausgabeordner für gewöhnlich <Ihr Projekt>\bin\Debug.

  • In einem lokalen Bereitstellungsordner für Tests auf dem gleichen Computer wie der Build

  • Auf einem Remotecomputer. Remotebereitstellungen werden verwendet, um verteilte Anwendungen oder Webanwendungen sowie Anwendungen zu testen, die auf einer bestimmten Plattform ausgeführt werden müssen. Für die Remotebereitstellung müssen Sie einen Testcontroller und Test-Agents einrichten, und Sie führen die Tests in der Regel in einer Lab-Umgebung aus. Weitere Informationen über die Remotebereitstellung finden Sie unter Gewusst wie: Ausführen eines Test-Controllern und Test-Agents.

Wie werden Testdateien für einen lokalen Test bereitgestellt?

Dies ist die optimale Methode:

  1. Kopieren Sie die Dateien als Teil des Buildprozesses ins Zielverzeichnis des Builds.

    • Wenn sie für ein Testprojekt spezifisch sind, binden Sie sie als Inhaltsdateien ins Visual Studio-Testprojekt ein. Wählen Sie sie im Projektmappen-Explorer aus, und legen Sie die Eigenschaft In Ausgabeverzeichnis kopieren auf Kopieren, wenn neuer fest.

    • Definieren Sie andernfalls eine Postbuildaufgabe, um die Dateien in das Buildausgabeverzeichnis zu kopieren. Beispiel:

      xcopy /Y /S "$(SolutionDir)SharedFiles\*" "$(TargetDir)"
      

      Öffnen Sie die Projekteigenschaften des Testprojekts. Öffnen Sie in einem C#-Projekt die Seite Buildereignisse. Öffnen Sie in einem Visual Basic-Projekt die Seite Kompilieren, und wählen Sie Buildereignisse aus. Fügen Sie dem Feld Postbuildereignis den Kopierbefehl hinzu.

  2. Verwenden Sie DeploymentItemAttribute für Testmethoden oder Testklassen, um die Dateien und Ordner anzugeben, die aus dem Buildausgabeverzeichnis in den Bereitstellungsordner kopiert werden sollen.

    [TestClass]
    class TestClass1
    {
      [TestMethod]
      [DeploymentItem("source", "targetFolder")]
      public void Test1()
      {
        string testData = System.IO.File.ReadAllText(@"targetFolder\source");
        ...
    } }
    
    <TestClass()> _
    Public Class UnitTest1
        <TestMethod()> _
        <DeploymentItem("source", "targetFolder")> _
        Sub TestMethod1()
            Dim testData As String = _
                System.IO.File.ReadAllText(@"targetFolder\source")
        ...
        End Sub
    End Class
    
    • source ist eine zu kopierende Datei oder ein zu kopierendes Verzeichnis. Der Pfad kann absolut oder relativ zum Buildausgabeverzeichnis sein.

    • targetFolder ist optional. Es ist das Verzeichnis, in das die Quelldatei oder der Verzeichnisinhalt kopiert wird. Der Pfad kann absolut oder relativ zum Bereitstellungsverzeichnis sein. Der Standardwert ist ".", das Bereitstellungsverzeichnis.

      Hinweis

      targetFolder ist immer ein Verzeichnis und nie ein Dateipfad.Sie können mit DeploymentItem den Namen der Datei nicht ändern.

    Sie können das Attribut beliebig oft verwenden, und Sie können es auf Testmethoden oder Testklassen anwenden.

    Wenn Sie einen Satz von auszuführenden Tests auswählen, werden alle in ihren DeploymentItem-Attributen angegebenen Elemente vor Beginn des Testlaufs kopiert.

  3. Sie können die Komponententests direkt im Buildausgabeverzeichnis ausführen, damit Tests schneller ausgeführt werden. Dies ist auf dem Buildserver besonders nützlich, nachdem Sie die Tests eingecheckt haben.

    Fügen Sie hierzu Ihrer Projektmappe eine *.runsettings-Datei hinzu, fügen Sie <DeploymentEnabled>False</DeploymentEnabled> ein, und wählen Sie die Datei im Menü Test, Testeinstellungen aus. Derselbe Effekt tritt in jedem Testlauf auf, in dem DeploymentItemAttribute gar nicht verwendet wird.

    Sie können jedoch die Verwendung eines Bereitstellungsordners nicht umgehen, wenn Sie eine *.testsettings-Datei verwenden, die für Web- und Auslastungstests, Tests der codierten UI sowie alle Tests erforderlich ist, in denen eine Anwendung für Remotecomputer bereitgestellt wird.

Was ist eine "*.runsettings"-Datei?

Eine Datei mit einem beliebigen Namen und der Erweiterung "*.runsettings". Sie wird verwendet, um Komponententests für bestimmte Zwecke zu konfigurieren. Wenn Sie eine erstellen möchten, kopieren Sie das Beispiel aus Konfigurieren von Komponententests mithilfe einer .runsettings-Datei. Legen Sie sie in ihrem Arbeitsmappenordner ab, und machen Sie sie anschließend mithilfe des Menüs Test > Testeinstellungen aktiv.

Gründe für die Verwendung einer "*.testsettings"-Datei

Eine *.testsettings-Datei (d. h. eine Datei mit einem beliebigen Namen und der Dateinamenserweiterung ".testsettings") ist eine ältere Alternative zu "*.runsettings". Wenn Sie eine erstellen möchten, verwenden Sie das Menüelement im Menü Test > Testeinstellungen. Speichern Sie die Datei im Projektmappenordner, und machen Sie sie mithilfe des Menüs Test >Testeinstellungen aktiv.

Verwenden Sie eine Datei mit der Erweiterung *.testsettings nur, wenn es wirklich unumgänglich ist, da dadurch der Test langsamer ausgeführt wird und mit Drittanbieter-Testframeworks inkompatibel ist. Sie benötigen sie nicht für allgemeine Komponententests. Aber in den folgenden Fällen ist sie erforderlich:

Wenn Sie eine "*.testsettings"-Datei verwenden, werden die Anwendung und Testassemblys immer in einen Bereitstellungsordner kopiert.

Sie können Datendateien und Verzeichnisse auf der Seite Bereitstellung des .testsettings-Editors angeben. Sie werden in den Bereitstellungsordner vor jedem Testlauf kopiert. Die auf dieser Seite angegebenen Elementpfade sind immer relativ zum Projektmappenverzeichnis und werden immer im Bereitstellungsordner an der Seite der Anwendung und Testassemblys bereitgestellt.

Wenn Sie absolute Pfade verwenden oder ein anderes Zielverzeichnis angeben möchten, öffnen Sie die .testsettings-Datei mit dem XML-Editor, und fügen Sie ein Fragment wie dieses ein:

<Deployment>
  <DeploymentItem filename="C:\MyTestData\TestData.mdb"
        outputDirectory="D:\TestDB\" />
</Deployment>

outputDirectory kann absolut oder relativ zum Bereitstellungsverzeichnis sein.

Wann wird ein separater Bereitstellungsordner verwendet?

Wenn Sie Tests mit Visual Studio ausführen, wird der Bereitstellungsordner unter TestResults im Projektmappenordner erstellt.

Ein separater Bereitstellungsordner wird verwendet, wenn eine der Testmethoden oder Klassen in einem Testlauf das "DeploymentItem"-Attribut aufweist oder wenn eine *.testsettings-Datei verwendet wird.

Wenn ein Bereitstellungsordner verwendet wird, werden die folgenden Dateien und Ordner in den Bereitstellungsordner kopiert, bevor die Tests ausgeführt werden:

  • Die Testassembly

  • Alle abhängigen Assemblys

  • Dateien und Verzeichnisse, die Sie entweder mithilfe von DeploymentItemAttribute oder in einer *.testsettings-Datei explizit angegeben haben

Lokaler Bereitstellungsordner für Tests

Bereitstellungsordner für einen lokalen Testlauf

Wann und in welcher Reihenfolge werden Dateien bereitgestellt?

In einem Testlauf werden alle bereitzustellenden Dateien kopiert, bevor die Tests gestartet werden. Ein Testlauf ist ein von einem einzelnen Befehl oder geplanten Ereignis initiierter Batch von Tests. Wenn Sie also eine Datendatei angeben, die für eine bestimmte Testmethode bereitgestellt werden soll, ist diese auch für jeden anderen Test verfügbar, der im selben Lauf durchgeführt wird.

Die folgenden Elemente werden in der angegebenen Reihenfolge kopiert. Später kopierte Elemente überschreiben zuvor kopierte Elemente mit demselben Namen.

  1. Elemente, die mithilfe von DeploymentItemAttribute angegeben werden

  2. Abhängigkeiten. Beispielsweise Anwendungskonfigurationsdateien und abhängige Assemblys.

  3. Elemente, die in einer *.testsettings-Datei angegeben werden, wenn eine verwendet wird.

  4. Instrumentierte Binärdateien. Beispielsweise Assemblys, die instrumentiert wurden, um Codeabdeckung oder IntelliTrace zu ermöglichen.

    Wenn Sie die direkte Instrumentation verwenden, werden Binärdateien zuerst instrumentiert und dann in den Bereitstellungsordner kopiert. Anderenfalls werden sie zuerst kopiert und danach instrumentiert. Direkte Instrumentation ist die Standardeinstellung für Tests, die lokal ausgeführt werden.

  5. Die Datei bzw. die Dateien, aus denen der Test besteht. Hierzu gehören Testassemblys für Komponententests, Text- oder MHT-Dateien für manuelle Tests oder andere Dateitypen für andere Testtypen, z. B. generische Tests.

Was befindet sich im TestResults-Verzeichnis?

  • Testlaufordner. TestResults enthält einen Ordner für jeden Testlauf, der gestartet wurde. Der Ordnername enthält den Zeitpunkt, an dem er erstellt wurde.

    Wenn Sie Setup- und Bereinigungsskripts in einer "*.testsettings"-Datei angeben, sind diese Skripts im Testlaufordner enthalten.

  • Out. Jeder Testlaufordner enthält einen Ordner mit dem Namen Out. Der Ordner "Out" ist der eigentliche Bereitstellungsordner, in den Assemblys und andere Bereitstellungsdateien kopiert werden, wenn der Testlauf gestartet wird.

  • In. Codeabdeckungsergebnisse und bestimmte andere Testergebnisse werden im Ordner "In" gespeichert.

Siehe auch

DeploymentItemAttribute
Angeben von Testeinstellungen für Visual Studio-Tests
Instrumentieren und erneutes Signieren von Assemblys