Skip to content

Instantly share code, notes, and snippets.

@BenjaminKlatt
BenjaminKlatt / github-print-bookmarklet
Created October 16, 2014 12:07
Bookmarklet for Removing GitHub Frame for Printing
javascript:(function(e,a,g,h,f,c,b,d)%7Bif(!(f=e.jQuery)%7C%7Cg%3Ef.fn.jquery%7C%7Ch(f))%7Bc=a.createElement(%22script%22);c.type=%22text/javascript%22;c.src=%22http://ajax.googleapis.com/ajax/libs/jquery/%22+g+%22/jquery.min.js%22;c.onload=c.onreadystatechange=function()%7Bif(!b&&(!(d=this.readyState)%7C%7Cd==%22loaded%22%7C%7Cd==%22complete%22))%7Bh((f=e.jQuery).noConflict(1),b=1);f(c).remove()%7D%7D;a.documentElement.childNodes%5B0%5D.appendChild(c)%7D%7D)(window,document,%221.3.2%22,function($,L)%7B$('%23header,%20.pagehead,%20.breadcrumb,%20.commit,%20.meta,%20%23footer,%20%23footer-push,%20.wiki-actions,%20%23last-edit,%20.actions,%20.header,.site-footer,.repository-sidebar,.file-navigation,.gh-header-meta,.gh-header-actions,#wiki-rightbar,#wiki-footer').remove();%20$('%23files,%20.file').css(%7B%22background%22:%22none%22,%20%22border%22:%22none%22%7D);%20$('link').removeAttr('media');%7D);
@BenjaminKlatt
BenjaminKlatt / pom.xml
Last active February 28, 2022 08:10
ArchUnit Maven Integration
<dependency>
<groupId>com.tngtech.archunit</groupId>
<artifactId>archunit-junit5</artifactId>
<version>0.23.1</version>
<scope>test</scope>
</dependency>
@BenjaminKlatt
BenjaminKlatt / gradle.build
Last active February 28, 2022 08:11
ArchUnit Gradle Integration
dependencies {
testImplementation 'com.tngtech.archunit:archunit-junit5:0.23.1'
}
@BenjaminKlatt
BenjaminKlatt / SimpleArchitectureTest.java
Created October 12, 2020 15:39
ArchUnit Basis Test
package de.viadee.architecture.archunit.architecture;
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;
import org.junit.jupiter.api.Test;
import com.tngtech.archunit.core.domain.JavaClasses;
import com.tngtech.archunit.core.importer.ClassFileImporter;
import com.tngtech.archunit.lang.ArchRule;
public class SimpleArchitectureTest {
@Test
@BenjaminKlatt
BenjaminKlatt / archunit.log
Created October 12, 2020 15:42
ArchUnit Failure Trace
java.lang.AssertionError: Architecture Violation [Priority: MEDIUM] - Rule 'no classes that reside in a package '..controller..' should depend on classes that reside in a package '..persistence..', because controllers must use business services instead of the persistence layer' was violated (3 times):
Constructor <de.viadee.architecture.archunit.controller.HelloWorldController.<init>(de.viadee.architecture.archunit.service.HelloWorldService, de.viadee.architecture.archunit.persistence.PersistenceManager)> has parameter of type <de.viadee.architecture.archunit.persistence.PersistenceManager> in (HelloWorldController.java:0)
Field <de.viadee.architecture.archunit.controller.HelloWorldController.persistenceManager> has type <de.viadee.architecture.archunit.persistence.PersistenceManager> in (HelloWorldController.java:0)
Method <de.viadee.architecture.archunit.controller.HelloWorldController.save(java.lang.String)> calls method <de.viadee.architecture.archunit.persistence.PersistenceManager.save(java.lang.O
@BenjaminKlatt
BenjaminKlatt / SimpleArchitectureCompactTest.java
Created October 12, 2020 15:51
ArchUnit Kompaktschreibweise
package de.viadee.architecture.archunit.architecture;
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;
import com.tngtech.archunit.junit.AnalyzeClasses;
import com.tngtech.archunit.junit.ArchTest;
import com.tngtech.archunit.lang.ArchRule;
@AnalyzeClasses(packages = "de.viadee.architecture.archunit")
public class SimpleArchitectureCompactTest {
@ArchTest
package de.viadee.architecture.archunit.architecture;
import static com.tngtech.archunit.library.Architectures.layeredArchitecture;
import com.tngtech.archunit.core.importer.ImportOption;
import com.tngtech.archunit.junit.AnalyzeClasses;
import com.tngtech.archunit.junit.ArchTest;
import com.tngtech.archunit.lang.ArchRule;
@AnalyzeClasses(
packages = "de.viadee.architecture.archunit",
@BenjaminKlatt
BenjaminKlatt / OnionArchitectureRulesTest.java
Created October 12, 2020 15:54
ArchUnit OnionArchitecture Test
package de.viadee.architecture.archunit.architecture;
import static com.tngtech.archunit.library.Architectures.onionArchitecture;
import com.tngtech.archunit.core.importer.ImportOption;
import com.tngtech.archunit.junit.AnalyzeClasses;
import com.tngtech.archunit.junit.ArchTest;
import com.tngtech.archunit.lang.ArchRule;
@AnalyzeClasses(
packages = "de.viadee.architecture.archunit",
@BenjaminKlatt
BenjaminKlatt / ExternalDependencyTest.java
Created October 12, 2020 15:55
ArchUnit Externe Abhängigkeiten
@ArchTest
private static ArchRule no_java_util_date =
noClasses()
.should().dependOnClassesThat()
.haveFullyQualifiedName(java.util.Date.class.getName())
.because("LocalDate statt java.util.Date verwenden");
@BenjaminKlatt
BenjaminKlatt / NamingConventionsTest.java
Created October 12, 2020 15:57
ArchUnit Naming Conventions Test
@ArchTest
private static ArchRule controllers_should_be_suffixed =
classes()
.that().areAnnotatedWith(RestController.class)
.should().haveSimpleNameEndingWith("Controller")
.and().resideInAPackage("..controller..")
.because("Erkennbarkeit Controller Hauptklasse");