Ich führe eine ~ 300K LOC C # Legacy-Thick-Client-Anwendung mit einer Windows.Forms-Schnittstelle. Die App ist voller kleiner Fehler und Macken. Zum Beispiel habe ich kürzlich einen Fehler entdeckt, bei dem Benutzer, wenn sie Zellen in einem DataViewGrid bearbeiten und Tabulatoren (nicht klicken) und eine bestimmte Zelle ausgewählt lassen, die Ausnahme "Objektreferenz nicht auf Instanz eines Objekts setzen" erhält . Ich entdecke (oder erhalte einen Fehlerbericht) über so etwas Neues über jede Woche oder zwei. Ich hatte genug und dachte daran, eine Art Fuzz-Test auf der Anwendung zu versuchen, um unentdeckte Probleme herauszufinden.
Wenn ich meine Fuzz-Tests selbst mache, würde ich davon ausgehen, dass ich zumindest in der Lage sein muss, Testsätze zu generieren, die Teile meiner App (Hauptfenster, FormX, FormY, FormZ, ...) unabhängig voneinander ausführen Versuche, Ereignisse in sie zu injizieren.
Ich habe versucht, nach Tools zu suchen, die dafür geeignet sind, aber bisher habe ich nichts für Win Forms gefunden. (Es scheint jedoch keinen Mangel an Fuzz-Test-Tools für Web-Apps zu geben).
Irgendwelche hilfreiche Ideen?
Ich mag immer die Idee des Gremlins-Testwerkzeugs, das auf Palm-Handhelds verwendet wird. Es erzeugte zufällige Antippen-Ereignisse, um Fehler bei der UI-Programmierung zu beseitigen. Sie könnten dasselbe in Ihrer App tun, indem Sie Millionen von Maus-Down- und Up-Events an zufälligen Orten generieren. Sie müssen PostMessage () aufrufen und Control.GetChildAtPoint () verwenden, um das Fensterhandle für die WM_LBUTTONDOWN / UP-Nachrichten zu generieren. Application.DoEvents () in Ihrer Testschleife, um die Ereignishandler zur Ausführung zu bringen.
Beim Suchen im Internet habe ich zwei Links mit nützlichen Tools und Informationen zu Fuzz-Tests von WinForms-Apps gefunden:
Tags und Links .net winforms testing fuzz-testing