Zum Inhalt springen

Unit Testing Regular Expressions Exceptions


Schneeherz

Empfohlene Beiträge

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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);

        }

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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. :-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...