Schneeherz Geschrieben 18. Juni 2014 Teilen Geschrieben 18. Juni 2014 Hallo, ich schreibe gerade ein Programm, in dem ich Regular Expressions verwende. Ich bin noch Anfänger und habe die Tests nicht zu Anfang geschrieben und finde es nun ein bisschen schwierig, sie von meinem fertigen Code abzuleiten, deshalb lass ich den an dieser Stelle mal außen vor. Angenommen ich habe irgend ein Regex a la: (.*)(\/abcd\/efgh)(.*)(xml) An folgenden Stellen sollen Exceptions geworfen werden: - wenn der eingegebene String nicht dem Muster entspricht - wenn der eingegebene String Null ist - wenn der eingegebene String nicht gelesen werden kann/nicht existiert, da es keine in dem Fal hier xml-Datei ist Das Pattern an sich habe ich schon getestet. Also sicher gestellt, dass das Pattern richtig funktioniert, wenn man richtige oder falsche Werte eingibt. Bei den Exceptions bin ich allerdings ein wenig überfordert. Angenommen ich hätte im Code eine Exception: try { document.Load(string xyz); } catch (Exception ex) { MessageBox.Show("string xyz does not exist"); } return document; Wie kann ich sie testen, wenn sie innerhalb einer privaten Methode ist? Vielen Dank schon einmal für Antworten! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lbm1305 Geschrieben 18. Juni 2014 Teilen Geschrieben 18. Juni 2014 Die Exception wird im Catch-Block bereits behandelt. Leider lässt sich durch den Code-Schnipsel nicht sehen, in welcher Klasse die Excpetion gefangen wird. Von der Messagebox ausgehend, denke ich, dass es sich um ein ViewModel handelt. Beim MMMV-Pattern sollte ein DialogService verwendet werden, welcher durch ein Interface definiert wurde. Dann kann man den DialogService als Fake / Mock reinreichen und überprüfen, ob das Fake-Objekt aufgerufen wurde. Wenn die Exception weitergeworfen werden soll bzw. wird, dann kann man dies so testen. Pseudocode: public string TestString { get { return _testString; } set { SetProperty(ref _testString, value); LoadDocument(value); } } private void LoadDocument(string value) { try { var document = new XmlDocument(); document.Load(value); } catch (Exception ex) { throw; } } Pseudocode: [Test] public void Test2() { var applicationSettingsFake = A.Fake<IApplicationSettings>(); applicationSettingsFake.CallsTo(settings => settings.Custom).Returns("Der Rückgabewert"); var customViewModel = new CustomViewModel(applicationSettingsFake); Assert.Throws<ArgumentException>(() => customViewModel.TestString = string.Empty); } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 19. Juni 2014 Teilen Geschrieben 19. Juni 2014 Von der Messagebox ausgehend, denke ich, dass es sich um ein ViewModel handelt. MessageBox-Klasse (System.Windows.Forms) Btw. Genau das ist das Problem an WinForms: Der Code ist quasi untestbar. Sauberer wäre es eine Trennung zwischen Anzeigecode (Messagebox) und Rest der Anwendung hinzubekommen. Der obige Code besitzt eine zu starke Kopplung zwischen Anzeige und Verarbeitung. WPF zwingt Dir das MVVM-Pattern auf, was zumindest den Vorteil hat, dass der Code testbar ist. Das in WinFroms reinzuwürgen wird schwierig. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lbm1305 Geschrieben 19. Juni 2014 Teilen Geschrieben 19. Juni 2014 Nur zur Bemerkung: Mit der MessageBox meinte ich den Platz, wo diese aufgerufen wird, nicht die Klasse selber. Was man eben oft sieht, dass Dialoge (wie bspw. MessageBox) direkt aus dem ViewModel aufgerufen werden. Besser ist es, wie bereits mehrfach angesprochen, diese Dialoge zu kapseln. :-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.