{"id":16877,"date":"2021-05-21T05:19:44","date_gmt":"2021-05-21T03:19:44","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=16877"},"modified":"2021-05-27T19:58:41","modified_gmt":"2021-05-27T17:58:41","slug":"archunit-valedierung","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=16877","title":{"rendered":"Architektur mit archunit validieren"},"content":{"rendered":"<p>Mit automatischer Architektur validierung mit JUnit 5 Annotation <strong>@ArchTest<\/strong> von <a href=\"https:\/\/github.com\/TNG\/ArchUnit\" rel=\"noopener\" target=\"_blank\">archunit<\/a> kann leicht die Architektur vorgaben \u00fcberpr\u00fcft werden. Aber es kann auch leicht verhindert werden, das man z.B. <strong>System.out<\/strong> oder <strong>System.err<\/strong> verwendet. Oder das verhindert wird, das das interne Java Logging verwendet wird. <\/p>\n<p>Was f\u00fcr mich auch wichtig ist, das der Logger immer LOG hei\u00dft, und nicht log oder logger.<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/05\/wenzlaff.de-2021-05-20-um-18.28.42.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/05\/wenzlaff.de-2021-05-20-um-18.28.42.png\" alt=\"\" width=\"600\" height=\"528\" class=\"aligncenter size-full wp-image-16878\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/05\/wenzlaff.de-2021-05-20-um-18.28.42.png 600w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/05\/wenzlaff.de-2021-05-20-um-18.28.42-300x264.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><br \/>\nEinfach diese JUnit-Test Klasse in alle Projekte einbinden. <!--more--><\/p>\n<pre class=\"lang:java decode:true \" >\r\n\r\npackage de.wenzlaff.blockchain;\r\n\r\nimport org.apache.logging.log4j.Logger;\r\n\r\nimport com.tngtech.archunit.junit.AnalyzeClasses;\r\nimport com.tngtech.archunit.junit.ArchTest;\r\nimport com.tngtech.archunit.lang.ArchRule;\r\nimport com.tngtech.archunit.lang.CompositeArchRule;\r\nimport com.tngtech.archunit.library.GeneralCodingRules;\r\n\r\nimport static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.fields;\r\nimport static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;\r\n\r\n\/**\r\n * Architektur vorgaben.\r\n * \r\n * @author Thomas Wenzlaff\r\n *\/\r\n@AnalyzeClasses(packages = \"de.wenzlaff\")\r\npublic class ArchitekturValidator {\r\n\r\n\t\/**\r\n\t * Klasse hat kein Zugriff auf System.in, System.out or System.err\r\n\t * \r\n\t * Klasse soll kein java util logging nutzen\r\n\t * \r\n\t * Klasse soll kein joda time\r\n\t * \r\n\t * Methoden sollen keine Generic Exception werfen\r\n\t *\/\r\n\t@ArchTest\r\n\tstatic final ArchRule Allgemeine_Regel = CompositeArchRule\r\n\t\t\t.of(GeneralCodingRules.NO_CLASSES_SHOULD_ACCESS_STANDARD_STREAMS)\r\n\t\t\t.and(GeneralCodingRules.NO_CLASSES_SHOULD_THROW_GENERIC_EXCEPTIONS)\r\n\t\t\t.and(GeneralCodingRules.NO_CLASSES_SHOULD_USE_JAVA_UTIL_LOGGING)\r\n\t\t\t.and(GeneralCodingRules.NO_CLASSES_SHOULD_USE_JODATIME)\r\n\t\t\t.because(\"Allgemeine Architektur Regel\");\r\n\r\n\t\/**\r\n\t * Apache Log4J Logger nur private, final und static und Feldname LOG\r\n\t *\/\r\n\t@ArchTest\r\n\tstatic final ArchRule Logger_Regel = fields().that()\r\n\t\t\t.haveRawType(Logger.class).should().bePrivate()\r\n\t\t\t.andShould().beStatic().andShould().beFinal()\r\n\t\t\t.andShould().haveName(\"LOG\")\r\n\t\t\t.because(\"Eigene Architektur Regel\");\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Mit automatischer Architektur validierung mit JUnit 5 Annotation @ArchTest von archunit kann leicht die Architektur vorgaben \u00fcberpr\u00fcft werden. Aber es kann auch leicht verhindert werden, das man z.B. System.out oder System.err verwendet. Oder das verhindert wird, das das interne Java Logging verwendet wird. Was f\u00fcr mich auch wichtig ist, das der Logger immer LOG hei\u00dft, &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=16877\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eArchitektur mit archunit validieren\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[220,5,3897,2953,79,2658],"tags":[4882,107,4880,4843,4881,2178,2095,3394],"class_list":["post-16877","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-java","category-java-programmierung","category-junit-5","category-programmierung","category-test-thema","tag-4882","tag-architektur","tag-architektur-ueberpruefen","tag-archunit","tag-erstellt-blockzeit-684330","tag-java","tag-ueberpruefen","tag-validieren"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/16877","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=16877"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/16877\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=16877"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=16877"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=16877"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}