Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

replace generated Archtest by TechnicalStructureTest #17548

Merged
merged 9 commits into from Jan 17, 2022

Conversation

mshima
Copy link
Member

@mshima mshima commented Jan 12, 2022

Since the generated application is modelled after a simple layered architecture we can provide a generated ArchUnit test that uses Architectures.layeredArchitecture() as a nice example of a higher abstraction architecture rule. This will assert even more dependencies for correctness than before (for example no dependencies from repositories to services). Furthermore, by specifying an exact list of which layer is allowed to access which other layer, instead of forbidding specific dependencies from one layer to another, we remove one potential source of accidental violation. E.g., by forbidding service -> web we can still have accesses like services -> some_utils_no_one_cares_about -> web. If we specify that no other layer may access web (because all accesses are via REST, etc., and not from other Java code), we can make sure that there are no accidental dependencies through some unexpected packages.

I've also replaced the manual import via new ClassFileImporter()...importPackages(..) by ArchUnit's JUnit 5 support. The dependency was already correct anyway, and it allows to write the test a little more concisely and automatically brings caching between multiple rules that import the same classes.

Resolves: #17520
Includes: #17521


Please make sure the below checklist is followed for Pull Requests.

When you are still working on the PR, consider converting it to Draft (below reviewers) and adding skip-ci label, you can still see CI build result at your branch.

Since the generated application is modelled after a simple layered architecture we can provide a generated ArchUnit test that uses `Architectures.layeredArchitecture()` as a nice example of a higher abstraction architecture rule. This will assert even more dependencies for correctness than before (for example no dependencies from repositories to services). Furthermore, by specifying an exact list of which layer is allowed to access which other layer, instead of forbidding specific dependencies from one layer to another, we remove one potential source of accidental violation. E.g., by forbidding `service -> web` we can still have accesses like `services -> some_utils_no_one_cares_about -> web`. If we specify that no other layer may access web (because all accesses are via REST, etc., and not from other Java code), we can make sure that there are no accidental dependencies through some unexpected packages.

 I've also replaced the manual import via `new ClassFileImporter()...importPackages(..)` by ArchUnit's JUnit 5 support. The dependency was already correct anyway, and it allows to write the test a little more concisely and automatically brings caching between multiple rules that import the same classes.

Resolves: #17520
@DanielFran DanielFran merged commit 4f6fade into main Jan 17, 2022
@DanielFran DanielFran deleted the skip_ci-technical_structure_test branch January 17, 2022 18:47
@DanielFran
Copy link
Member

@mshima It seems that for no database we have issues: https://github.com/hipster-labs/jhipster-daily-builds/runs/4891398745

@pascalgrimaud pascalgrimaud added this to the 7.6.0 milestone Jan 23, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Introduce more sophisticated ArchUnit architecture test
4 participants