{"id":55000292,"date":"2021-12-01T00:00:00","date_gmt":"2022-03-31T21:33:32","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=292"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"UnitTesting_mit_Visual_Studio","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/UnitTesting_mit_Visual_Studio\/","title":{"rendered":"Unit-Testing mit Visual Studio"},"content":{"rendered":"<p><b>In den bisherigen Ausgaben von Datenbankentwickler haben wir ohne moderne Entwurfsmuster programmiert und beispielsweise den Code von Fenstern im Code behind-Modul gespeichert. Das wollen wir nun &auml;ndern und das Entwurfsmuster Model-View-ViewModel (kurz MVVM) vorstellen.  Das erm&ouml;glicht durch eine Zwischenschicht zwischen der Benutzeroberfl&auml;che und dem Entity Data Model das automatisierte Testen der meisten Funktionen einer Anwendung. Durch automatisiertes Testen, hier Unit-Testing genannt, k&ouml;nnen wir Tests f&uuml;r unseren Code definieren, die wir immer wieder per Mausklick durchf&uuml;hren k&ouml;nnen. So k&ouml;nnen Sie &Auml;nderungen am Code durchf&uuml;hren und sich blitzschnell versichern, dass der Code noch so l&auml;uft wie gew&uuml;nscht. Im vorliegenden Artikel erl&auml;utern wir, was es mit Unit-Testing auf sich hat und wie Sie es unter Visual Studio einsetzen.<\/b><\/p>\n<p>Tests von Softwareanwendungen sind meist aufwendig, vor allem, wenn sie manuell durchgef&uuml;hrt werden. Das gr&ouml;&szlig;te Problem dabei ist: Wenn sich eine Funktion der Anwendung &auml;ndert, muss man normalerweise zumindest alle damit zusammenh&auml;ngenden Funktionen erneut testen, was Zeit und Geld kostet. Eine Automatisierung der Tests &uuml;ber die Benutzeroberfl&auml;che ist ebenfalls kritisch zu sehen, was den Aufwand betrifft, denn auch hier k&ouml;nnen kleinste &Auml;nderungen dazu f&uuml;hren, dass die Tests nicht mehr funktionieren und ebenfalls angepasst werden m&uuml;ssen.<\/p>\n<p>Wenn Sie mit einem Entwurfsmuster wie dem eingangs erw&auml;hnten MVVM arbeiten, wobei es eine Schicht gibt, welche die Anwendungslogik enth&auml;lt und die Daten der Benutzeroberfl&auml;che liefert, aber keine Abh&auml;ngigkeit von der Benutzeroberfl&auml;che hat, k&ouml;nnen Sie diese Schicht mit der Anwendungslogik auch ohne den Umweg &uuml;ber die Benutzeroberfl&auml;che testen. Dazu initialisieren Sie die entsprechenden Objekte und testen deren Methoden.<\/p>\n<p>Weil sich diese Tests meist auf einzelne Klassen oder Komponenten beziehen, werden sie im Allgemeinen Unit-Tests genannt.<\/p>\n<h2>Beispielprojekt f&uuml;r die Unit-Tests erstellen<\/h2>\n<p>Da wir in diesem Magazin meist Desktop-Anwendungen programmieren, wollen wir auch als Beispiel f&uuml;r die Unit-Tests ein solches Projekt nutzen. Also legen Sie ein neues Projekt des Typs <b>WPF-App (.NET-Framework) <\/b>an und legen f&uuml;r dieses den Namen <b>UnitTestBeispiel <\/b>fest.<\/p>\n<p>Im Anschluss an diesen Vorgang sollte Visual Studio ge&ouml;ffnet sein und im Projektmappen-Explorer das neu erstellte Projekt anzeigen.<\/p>\n<h2>M&ouml;gliche Konfigurationen f&uuml;r Unit-Tests<\/h2>\n<p>Wenn Sie Unittests durchf&uuml;hren wollen, haben Sie verschiedene M&ouml;glichkeiten &#8211; zum Beispiel die folgenden:<\/p>\n<ul>\n<li>Sie erstellen ein eigenes Projekt, das nur die Unittests enth&auml;lt und das Sie gemeinsam mit dem Testprojekt in einer Projektmappe verwalten.<\/li>\n<li>Sie erstellen die zum Testen notwendigen Elemente innerhalb des zu testenden Projekts.<\/li>\n<\/ul>\n<p>Eines der Ziele beim Unit-Testing ist, den Code des zu testenden Projekts nicht aufzubl&auml;hen. Deshalb f&uuml;gen wir die Unit-Tests auch nicht zu dem Projekt hinzu, das wir testen wollen, sondern legen ein eigenes Projekt daf&uuml;r an. Dieses Projekt soll allerdings in einer Projektmappe mit dem zu testenden Projekt landen. Deshalb gehen wir wie folgt vor, um das Testprojekt zu erstellen:<\/p>\n<ul>\n<li>Bet&auml;tigen Sie den Men&uuml;befehl <b>Datei|Neu|Projekt&#8230; <\/b>(siehe Bild 1).<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_06\/pic_292_001.png\" alt=\"Anlegen eines neuen Projekts\" width=\"700\" height=\"151,2443\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Anlegen eines neuen Projekts<\/span><\/b><\/p>\n<li>W&auml;hlen Sie im Dialog <b>Neues Projekt erstellen <\/b>mit dem linken Auswahlfeld den Eintrag <b>Visual Basic <\/b>und mit dem rechten Auswahlfeld den Eintrag <b>Test <\/b>aus und finden Sie die verf&uuml;gbaren Testprojekte in der Liste. Hier w&auml;hlen wir die Projektvorlage <b>NUnit-Testprojekt <\/b>aus (siehe Bild 2).<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_06\/pic_292_002.png\" alt=\"Auswahl des Projekttyps\" width=\"700\" height=\"489,9997\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Auswahl des Projekttyps<\/span><\/b><\/p>\n<li>Im folgenden Schritt legen Sie den neuen Projektnamen fest. Diesen w&auml;hlen wir so, dass er mit dem Namen des zu testenden Projekts beginnt und h&auml;ngen die Zeichenfolge <b>.Unit.Test <\/b>an. Au&szlig;erdem stellen wir hier ein, dass das neue Projekt der bestehenden Projektemappe hinzugef&uuml;gt werden soll (siehe Bild 3).<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_06\/pic_292_003.png\" alt=\"Hinzuf&uuml;gen des Projekts zur bestehenden Projektmappe\" width=\"624,6265\" height=\"437,2387\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Hinzuf&uuml;gen des Projekts zur bestehenden Projektmappe<\/span><\/b><\/p>\n<li>Schlie&szlig;lich legen Sie noch das Zielframework f&uuml;r das neue Projekt fest. <\/li>\n<\/ul>\n<p>Das gleiche Ergebnis erhalten Sie &uuml;brigens auch, wenn Sie den Men&uuml;befehl <b>Datei|Hinzuf&uuml;gen|Neues Projekt&#8230; <\/b>bet&auml;tigen &#8211; Sie brauchen dann im Dialog <b>Neues Projekt konfigurieren <\/b>nicht mehr festzulegen, dass das neue Projekt zur aktuellen Projektmappe hinzugef&uuml;gt werden soll.<\/p>\n<h2>Das neue Unit-Test-Projekt<\/h2>\n<p>Das Anlegen des Projekts hat zwei sichtbare &Auml;nderungen in unserem Projekt bewirkt. Die erste ist, dass wir im Projektmappen-Explorer unter unserem eigentlichen Projekt auch das neu angelegte Unit-Test-Projekt vorfinden (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_06\/pic_292_004.png\" alt=\"Das neue Testprojekt in der Projektmappe des zu testenden Projekts\" width=\"349,6267\" height=\"426,5446\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Das neue Testprojekt in der Projektmappe des zu testenden Projekts<\/span><\/b><\/p>\n<p>Die zweite &Auml;nderung ist das Klassenmodul <b>UnitTest1.vb<\/b>, das wir im Codefenster von Visual Studio vorfinden (siehe Bild 5). Die Bestandteile schauen wir uns gleich genauer an.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_06\/pic_292_005.png\" alt=\"Die Vorlage f&uuml;r eine Testklasse\" width=\"524,6265\" height=\"395,7083\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Die Vorlage f&uuml;r eine Testklasse<\/span><\/b><\/p>\n<h2>Verweis zum Unit-Test-Projekt hinzuf&uuml;gen<\/h2>\n<p>Bevor wir uns die Unit-Test-Vorlage ansehen, die zum Testprojekt hinzugef&uuml;gt wurde, wollen wir noch einen Verweis zum Testprojekt hinzuf&uuml;gen.<\/p>\n<p>Dieser soll auf das zu testende Projekt verweisen. Um das zu erledigen, klicken Sie im Projektmappen-Explorer unter dem Testprojekt mit der rechten Maustaste auf den Eintrag <b>Abh&auml;ngigkeiten <\/b>und w&auml;hlen den Kontextmen&uuml;befehl <b>Projektverweis hinzuf&uuml;gen&#8230; <\/b>aus (siehe Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_06\/pic_292_006.png\" alt=\"Hinzuf&uuml;gen eines Projektverweises\" width=\"549,6265\" height=\"464,3576\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Hinzuf&uuml;gen eines Projektverweises<\/span><\/b><\/p>\n<p>Der nun erscheinende Verweis-Manager zeigt direkt die Projektmappe des zu testenden Projekts an. Hier setzen Sie einen Haken vor den Eintrag <b>UnitTestBeispiel <\/b>und schlie&szlig;en den Dialog wieder (siehe Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_06\/pic_292_007.png\" alt=\"Hinzuf&uuml;gen des Verweises auf das zu testende Projekt\" width=\"700\" height=\"295,3259\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Hinzuf&uuml;gen des Verweises auf das zu testende Projekt<\/span><\/b><\/p>\n<h2>Die Unit-Test-Vorlage<\/h2>\n<p>Die unter dem Namen <b>UnitTest1.vb <\/b>hinzugef&uuml;gte Klasse importiert zun&auml;chst den Namespace <b>NUnit.Framework<\/b>:<\/p>\n<pre>Imports NUnit.Framework<\/pre>\n<p>Dann deklariert sie einen Namespace namens <b>Unittests<\/b>, der eine erste Testklasse namens <b>Tests <\/b>enth&auml;lt:<\/p>\n<pre>Namespace Unittests\r\n     <span style=\"color:blue;\">Public <\/span>Class Tests<\/pre>\n<p>Hier finden wir einen Bereich, der mit dem Attribut <b>SetUp <\/b>versehen ist und eine Methode namens <b>Setup <\/b>enth&auml;lt.<\/p>\n<p>Dieser Methode k&ouml;nnen Sie Anweisungen hinzuf&uuml;gen, welche vor dem Aufruf einer jeden Testmethode ausgef&uuml;hrt werden:<\/p>\n<pre>         &lt;SetUp&gt;\r\n         <span style=\"color:blue;\">Public <\/span>Sub Setup()\r\n         End Sub<\/pre>\n<p>Danach folgen die eigentlichen Testmethoden. Diese werden mit dem Attribut <b>Test <\/b>versehen und sehen wie herk&ouml;mmliche Methoden aus. Sie ben&ouml;tigen allerdings den Aufruf einer Methode der <b>Assert<\/b>-Klasse. Im Beispiel der Testvorlage lautet diese Methode <b>Pass<\/b>. <b>Pass <\/b>hei&szlig;t, dass der Test bestanden wurde:<\/p>\n<pre>         &lt;Test&gt;\r\n         <span style=\"color:blue;\">Public <\/span>Sub Test1()\r\n             Assert.Pass()\r\n         End Sub\r\n     End Class\r\nEnd Namespace<\/pre>\n<h2>Den ersten Unit-Test durchf&uuml;hren<\/h2>\n<p>Um diesen Unit-Test zu starten, nutzen Sie die daf&uuml;r vorgesehene Benutzeroberfl&auml;che.<\/p>\n<p>Diese erscheint, wenn Sie den Men&uuml;befehl <b>Test|Alle Tests ausf&uuml;hren <\/b>aufrufen, automatisch (siehe Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_06\/pic_292_008.png\" alt=\"Starten der Tests\" width=\"499,6267\" height=\"270,6758\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Starten der Tests<\/span><\/b><\/p>\n<p>Sie sehen dann im Bereich <b>Test-Explorer <\/b>den Ablauf und das Ergebnis des ersten Tests. Dieser verl&auml;uft mit dem Ergebnis <b>Bestanden<\/b>, was vorhersehbar war &#8211; <b>Assert.Pass <\/b>liefert immer einen bestandenen Test (siehe Bild 9).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_06\/pic_292_009.png\" alt=\"Ergebnis des ersten Tests\" width=\"599,6265\" height=\"308,3524\" \/><\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000292\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000292?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000292\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"123b777de9\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In den bisherigen Ausgaben von Datenbankentwickler haben wir ohne moderne Entwurfsmuster programmiert und beispielsweise den Code von Fenstern im Code behind-Modul gespeichert. Das wollen wir nun &auml;ndern und das Entwurfsmuster Model-View-ViewModel (kurz MVVM) vorstellen.  Das erm&ouml;glicht durch eine Zwischenschicht zwischen der Benutzeroberfl&auml;che und dem Entity Data Model das automatisierte Testen der meisten Funktionen einer Anwendung. Durch automatisiertes Testen, hier Unit-Testing genannt, k&ouml;nnen wir Tests f&uuml;r unseren Code definieren, die wir immer wieder per Mausklick durchf&uuml;hren k&ouml;nnen. So k&ouml;nnen Sie &Auml;nderungen am Code durchf&uuml;hren und sich blitzschnell versichern, dass der Code noch so l&auml;uft wie gew&uuml;nscht. Im vorliegenden Artikel erl&auml;utern wir, was es mit Unit-Testing auf sich hat und wie Sie es unter Visual Studio einsetzen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662021,66062021,44000027,44000026,44000030,44000016],"tags":[],"yst_prominent_words":[],"class_list":["post-55000292","post","type-post","status-publish","format-standard","hentry","category-662021","category-66062021","category-Excel_programmieren","category-Outlook_programmieren","category-PowerPoint_programmieren","category-VBGrundlagen"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000292","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000292"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000292\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000292"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000292"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000292"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000292"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}