2 Stimmen

Unit-Tests in Visual Studio 2010

Ich versuche, einen Unit-Test für eine WinForm in einem Visual Studio 2010-Projekt zu erstellen. Ich füge einen neuen "Coded UI Test" zu meinem Projekt hinzu, öffne die Codedatei, klicke dann mit der rechten Maustaste und wähle "Code für Coded UI Test generieren" -> "Coded UI Test builder verwenden". Dann starte ich meine Anwendung und wähle "Aufzeichnen" auf dem UI Map Control. Ich führe meine Tests aus (in diesem Fall wähle ich einfach ein Textfeld aus, gebe einen Zufallswert ein und klicke auf eine Schaltfläche). Dann wähle ich "Code generieren" aus dem UI-Map-Steuerelement, das den Code generiert, den der Test verwenden wird. Wenn ich diesen Test ausführe, erhalte ich den Fehler:

Prüfverfahren HelloWorldTest.CodedUITest1.CodedUITestMethod1 hat eine Ausnahme ausgelöst: Microsoft.VisualStudio.TestTools.UITest.Extension.UITestControlNotFoundException: Bei der Wiedergabe konnte das Steuerelement mit den angegebenen Such Eigenschaften. Zusätzliche Details: TechnologyName: 'MSAA' ControlType: 'Window' Name: 'Form1' ClassName: 'WindowsForms10.Window' ---> System.Runtime.InteropServices.COMException: Der Fehler HRESULT E_FAIL wurde zurückgegeben von einem Aufruf an eine COM-Komponente zurückgegeben.

Weiß jemand, was ich falsch mache?

感謝

0 Stimmen

Ich habe diese Technologie auf einer Microsoft-Veranstaltung vorgeführt bekommen. Sie sah sehr cool aus. Ich hoffe, es ist nicht zu schwer, sie zum Laufen zu bringen :-/

3 Stimmen

Übrigens bezieht sich der Begriff "Unit Test" in der Regel auf den Test einer einzelnen Methode in Isolation. Ein kodierter UI-Test fällt wahrscheinlich in die Kategorie "Integrationstest".

1voto

ShuManChu Punkte 13

Ich glaube, dass Ihr Problem mit dem Fenstertitel zusammenhängt. Sie sehen, dass Visual Studio jedem neuen Fenster, das in Ihrer Anwendung erzeugt wird, einen Fenstertitel zuweist. Als Sie Ihren Test aufzeichneten, lautete der Titel Ihres Fensters "Form1". So steht es auch in Ihrer Fehlermeldung:

SteuerungTyp: 'Window' Name: 'Form1'

Sie müssen also feststellen, ob Ihre Anwendung das Fenster jedes Mal umbenennt, wenn ein neues Fenster geöffnet wird (höchstwahrscheinlich ist das der Fall). Wenn Sie zum Beispiel ein zweites Fenster öffnen, könnte es "Form2" heißen.

Damit der kodierte UI-Test richtig funktioniert, muss er wissen, wo er nach bestimmten Steuerelementen suchen muss, um seine Aktionen auszuführen. Er muss also den Fenstertitel kennen, um "ein Textfeld auswählen, einen zufälligen Wert eingeben und auf eine Schaltfläche klicken" zu können.

Der einzige Weg, den ich gefunden habe, um dieses Problem zu beheben, besteht darin, den Fenstertitel manuell zu setzen, wenn ich weiß, dass er sich geändert hat oder sich ändern wird.

this.UIMap.UIHighCapitalFranchiseWindow.UIHighCapitalFranchiseDocument.UICtl00ContentPlaceHolComboBox.WindowTitles.Clear();
this.UIMap.UIHighCapitalFranchiseWindow.UIHighCapitalFranchiseDocument.UICtl00ContentPlaceHolComboBox.WindowTitles.Add("Franchises for Sale");

Wie Sie sehen können, lösche ich einfach alle Werte in der WindowTitles-Eigenschaft des Steuerelements und füge dann den richtigen Titel hinzu, den, von dem ich weiß, dass er es sein sollte. Im obigen Beispiel ist es wie folgt organisiert:

this.(Name Ihrer uimap-Datei).(Name Ihres Fensters).(Name des Dokuments im Fenster).(Name des bestimmten Steuerelements (Kombinationsfeld, Optionsfeld, Textfeld usw.)).WindowTitles.(clear or add)();

Dieser Code kann direkt in die codierte UI-Testdatei eingefügt werden, oder Sie verwenden die partielle Klasse UIMap.cs (die nicht automatisch generiert wird, UIMap.Designer.cs ist die automatisch generierte Klasse), um Änderungen an der UIMap vorzunehmen. Vergessen Sie nicht, die ".UIMap" zu entfernen, wenn Sie Letzteres wählen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X