The architecture of a system is usually a design that was made at a certain moment in time, and that fit the bill for the requirements at that time. However, as the system evolves and developers come and go, it’s hard to keep everyone up to date on a reference architecture or encourage developers to make changes to it, since it’s usually in the form of a set of documents, confluence pages, or something similar. This can result in code that violates architectural boundaries, piling up as technical debt. ArchUnit, an architecture testing library for Java, enables you to formalize your architectural constraints as a set of ordinary unit tests. Using a fluent API, it enables you to formalize your architectural constraints in a descriptive way and run these constraints as a part of your build pipeline. Because ArchUnit tests are normal unit tests, they can evolve as your architecture changes, using version control to keep track of all changes. In this presentation, lasting approximately 25 minutes, we’ll explore the ArchUnit library, and show you how you can use it to enforce your architectural constraints. A live demo is included. We’ll cover the following topics: • Getting started with ArchUnit • Different checks (package dependencies, layers, inheritance, annotations) supported by ArchUnit • Junit 4 and 5 support • Rules as a separate module