{"id":8640,"date":"2017-07-24T23:55:09","date_gmt":"2017-07-24T21:55:09","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=8640"},"modified":"2018-09-07T16:25:38","modified_gmt":"2018-09-07T14:25:38","slug":"cooler-csv-reader-in-junit-5","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=8640","title":{"rendered":"Cooler CSV Reader in JUnit 5"},"content":{"rendered":"<p>Will man Testf\u00e4lle aus einer CSV-Datei verwenden, geht das mit JUnit 5 Super einfach. Es gibt da eine neue Annotation <strong>@CsvFileSource<\/strong> der nur der Dateiname der CSV-Datei \u00fcbergeben werden muss, und schon wird f\u00fcr jede Zeile der Test ausgef\u00fchrt. Die Datei muss im Classpath liegen und mit Komma (,) getrennt sein. Sie darf keine \u00dcberschrift haben. <\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/07\/Junit-5.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/07\/Junit-5.png\" alt=\"JUnit 5\" width=\"2732\" height=\"2048\" class=\"aligncenter size-full wp-image-8650\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/07\/Junit-5.png 2732w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/07\/Junit-5-300x225.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/07\/Junit-5-768x576.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/07\/Junit-5-1024x768.png 1024w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>Als Beispiel soll  mal die flug-data.csv dienen, die ua. die Summe aller erfassten Flugzeuge enth\u00e4lt. <\/p>\n<p>Hier ein Auszug:<\/p>\n<pre class=\"lang:default decode:true \" >\r\naed4022e-c6e9-45b1-96c1-14270c68a036,3550,Fri Jun 30 07:37:25 CEST 2017,287,148,115,200,139,150,110,122,129,157,155,250,347,531,293,302,99,16\r\n8695a419-e76a-46f4-9a97-3ba7f0d06999,3514,Fri Jun 30 08:17:07 CEST 2017,206,138,126,181,137,151,126,119,117,142,172,214,338,576,353,292,103,23\r\nee29ce4a-4b9c-4491-ab6c-e888ccbbf4fa,3612,Fri Jun 30 08:29:03 CEST 2017,289,136,121,178,171,144,134,117,132,145,166,223,323,573,360,284,94,22\r\na95c25b5-8b3d-4922-9ce3-2d22269b32e8,3555,Fri Jun 30 09:23:14 CEST 2017,213,135,120,191,130,178,113,141,123,158,150,241,337,549,383,289,87,17\r\n874494b7-4824-40b2-8660-d9acec56f837,4121,Fri Jun 30 11:27:51 CEST 2017,220,142,129,209,165,158,137,153,141,174,191,339,395,672,364,369,139,24\r\n562e4c98-98bd-472c-9e9b-fc919c2260aa,5055,Fri Jun 30 16:00:44 CEST 2017,237,195,218,308,260,250,172,158,210,270,248,424,493,696,365,372,127,52\r\n898c57c1-88c2-436d-b49a-a2db85ddc1fb,3277,Sun Jul 02 08:35:18 CEST 2017,211,116,92,156,118,129,102,126,99,125,134,198,308,592,393,289,77,12\r\n6e3663bf-19c1-49fe-8260-3aa4e237b198,5084,Thu Jul 06 15:57:54 CEST 2017,292,206,216,318,259,221,149,150,179,211,230,364,474,781,421,390,160,63\r\nac38b07f-3aa6-4908-a7d7-bae630916f99,5296,Wed Jul 19 17:34:38 CEST 2017,259,237,214,347,272,237,181,174,186,237,202,332,440,821,439,480,183,55\r\nb7f9487e-dd29-4095-a064-d401192ce9ad,4904,Sun Jul 23 20:32:03 CEST 2017,227,275,221,331,264,209,165,147,171,190,218,329,379,726,434,394,157,67\r\n<\/pre>\n<p>Wir wollen jetzt jede Zeile \u00fcberpr\u00fcfen, ob die Summe \u00fcber 3000 Flugzeuge liegt und ob die UID vorhanden ist. Auch wollen wir die Testergebnisse um eine laufende Nr. erg\u00e4nzen.<!--more--><\/p>\n<p>Hier die Methode: <\/p>\n<pre class=\"theme:dark-terminal lang:java decode:true \" >\r\n\r\n@DisplayName(\"CSV Flugdaten validierung\")\r\n@ParameterizedTest(name = \"Test Nr. {index} mit Summe: {1} und UID: {0} \")\r\n@CsvFileSource(resources = \"\/flug-data.csv\")\r\nvoid flugDatenDateiTest(String uid, int summe) {\r\n\r\n\tassertNotNull(uid, \"Da fehlt eine UID\");\r\n\tassertTrue(summe &gt; 3000, \"Das sind zu wenig Flugzeuge!\");\r\n}\r\n<\/pre>\n<p>Mit {index} kann auf die laufende Nr. zugegriffen werden. Und mit {0} auf die erste Spalte mit {1} auf die zweite Spalte usw.<\/p>\n<p>Der Testlauf sieht dann so aus:<br \/>\n<a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/07\/Bildschirmfoto-2017-07-24-um-14.35.31.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/07\/Bildschirmfoto-2017-07-24-um-14.35.31.png\" alt=\"\" width=\"619\" height=\"1015\" class=\"aligncenter size-full wp-image-8642\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/07\/Bildschirmfoto-2017-07-24-um-14.35.31.png 619w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/07\/Bildschirmfoto-2017-07-24-um-14.35.31-183x300.png 183w\" sizes=\"auto, (max-width: 619px) 100vw, 619px\" \/><\/a><\/p>\n<p>Diese und auch andere Klassen sind in JUnit 5 noch mit <strong>@API(Experimental)<\/strong> annotiert. D.h. sie k\u00f6nnen in zuk\u00fcnftigen Versionen ohne weiteres auch wegfallen.<\/p>\n<p>\u00dcbrigens ist in der JUnit 5 Version der Nachrichten-Parameter nicht mehr an der 1. Stelle sondern an der Letzten. So kann man die Methoden auch auseinander halten und es braucht nicht mehr viel gescrollt zu werden:<\/p>\n<pre class=\"lang:java decode:true \" >\r\nassertNotNull(uid, \"Da fehlt eine UID\");\r\nassertTrue(summe &gt; 3000, \"Das sind zu wenig Flugzeuge!\");\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Will man Testf\u00e4lle aus einer CSV-Datei verwenden, geht das mit JUnit 5 Super einfach. Es gibt da eine neue Annotation @CsvFileSource der nur der Dateiname der CSV-Datei \u00fcbergeben werden muss, und schon wird f\u00fcr jede Zeile der Test ausgef\u00fchrt. Die Datei muss im Classpath liegen und mit Komma (,) getrennt sein. Sie darf keine \u00dcberschrift &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=8640\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eCooler CSV Reader in JUnit 5\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[220,1361,2953,2914,79,2658],"tags":[1721,2960,2958,2943,2959,194],"class_list":["post-8640","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-java-8","category-junit-5","category-oxygen","category-programmierung","category-test-thema","tag-csv","tag-csv-test","tag-file-reader-csv","tag-junit-5","tag-komma","tag-test-2"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/8640","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8640"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/8640\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8640"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8640"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8640"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}