2016-06-30 16 views
-1

I 3 Projekte in meiner Visual Studio-Lösung habe: 1 Anzahl der gemeinsamen Bibliotheksprojekt, 1 Unit-Test-Projekt (meist Selen WebDriver Tests) und 1 codiertes UI-Test-Projekt (ich hatte eine harte Zeit, die Kombination von Meine Unit testet und codiert UI-Tests in 1 Projekt - so haben wir 2). Ich habe eine statische Klasse mit einer statischen Eigenschaft im gemeinsam genutzten Bibliotheksprojekt namens Globals.Status.statischer Variable für Tests in verschiedenen Testprojekten

Ich habe einen Testfall, wo es Arbeit sowohl in einer broswer (die Selenium Unit-Test) und eine Desktop-Anwendung (der codierte UI-Test) durchgeführt erfordert. Der Selenium Unit Test ändert diese statische Statusvariable. Der codierte UI-Test (im codierten UI-Projekt) muss diese aktualisierte Statusvariable lesen. Wenn ich diese zwei Tests nacheinander ausführe, ist die Variable NULL, wenn der Test der codierten UI aufgerufen wird.

Ich habe den Test der codierten UI Projekt sowohl das Shared Library-Projekt und das Unit-Test-Projekt verweisen, aber offenbar ist dies nicht genug. Was muss ich tun, damit dies funktioniert?

Vielen Dank für einen Einblick!

+3

Tests sollten so geschrieben werden, dass sie nicht von anderen Tests abhängig sind, die eine Aktion ausführen. Sie sollten in der Lage sein, jeden einzelnen Test in Ihrer Suite auszuwählen, auszuführen und sich korrekt zu verhalten. Wenn das nicht möglich ist, sollten Sie das Design Ihrer Testsuite überdenken. – Kevin

+0

Ich verstehe dieses Konzept. Ja, idealerweise würde ich beide Tests in 1 Test kombinieren. Leider, wie gesagt, fiel es mir schwer, sowohl Selenium WebDriver als auch Coded UI Testcode in dasselbe Projekt zu schreiben. Dieser spezielle Funktionstest erfordert etwas Arbeit in einem Webbrowser (daher Selenium) und einige andere Arbeiten danach in einer Desktop-App (daher Coded UI). – AngieM

Antwort

1

Sie benötigen eine Eigenschaft sichern mit Daten, die außerhalb der Anwendung (genauer gesagt außerhalb des Speicherbereichs der ausführenden Baugruppe) erhalten wurden.

Es gibt ein paar vernünftigen Möglichkeiten, wie Sie dies tun könnten. AppFabric Cache, Redis oder vielleicht Memcached kommen in den Sinn.

+0

Vielen Dank für diesen Hinweis. Ich habe diesen Wert in einer Textdatei gespeichert, die vom CUIT-Test gelesen werden kann. – AngieM

1

Ich denke, dass Ihre UI-Test auf neue AppDomain läuft. Jede AppDomain erstellt eigene Instanzen aller statischen Variablen.

Was Sie tun können, ist zu Unit-Test-Code in neue Klasse zu bewegen und führen Sie es in UI-Test


P. S.

Tests sollten nicht auf den globalen Zustand abhängen. Außerdem sollte Einzeltest nicht von anderen Tests abhängen. Hier ist gut zu sprechen

sein Dies wird besonders heikel, wenn überhaupt Tests parallel

ausführen wollen, warum globale Zustand schlecht ist und was kann man dagegen tun es: https://www.youtube.com/watch?v=-FRm3VPhseI

+0

Danke für den Rat und Einblick in die AppDomain. Ja ich verstehe, dass es nicht das ideale Design war. Ich konnte Selenium WebDriver und Coded UI-Bibliotheken nicht dazu bringen, im selben Testprojekt gut zusammen zu spielen, also musste ich darauf zurückgreifen, sie getrennt zu halten. Ich muss es vielleicht noch einmal versuchen, wenn es die Zeit erlaubt, sie zu einem zu kombinieren. – AngieM

+0

Verschieben Sie Unit-Test-Code in das Shared-Library-Projekt, und dann können Sie den UI-Test aufrufen, ohne Referenzen auf die Abhängigkeiten der Bibliothek hinzuzufügen. –