Organizing Tests with @DisplayName and Nesting
Make your JUnit 5 test suites readable and well-structured using descriptive display names and nested test classes that group related scenarios.
Organizing Tests with @DisplayName and Nesting is a free Testing Mastery: JUnit, Mockito & Integration Tests lesson on CoddyKit — lesson 4 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Testing Mastery: JUnit, Mockito & Integration Tests learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
Tests Are Documentation
A test suite is more than a safety net — it documents how your code should behave. JUnit 5’s @DisplayName and @Nested make that documentation shine.
The Problem with Method Names
A name like testAdd2 says almost nothing, and method names can’t hold spaces or punctuation — so they can only be so expressive.
@Test
void testAdd2() { /* ... */ }Introducing @DisplayName
@DisplayName gives a test any readable label — spaces, punctuation, even emoji. Reports show the label instead of the method name.
@Test
@DisplayName("adds two positive numbers correctly")
void addsTwoPositives() {
assertEquals(5, calc.add(2, 3));
}Naming the Class Too
Put @DisplayName on the test class too, to describe the whole unit under test in plain language.
@DisplayName("Calculator")
class CalculatorTest { /* ... */ }Display Name Generators
Don’t want to annotate every method? A display name generator turns method names into readable text automatically.
@DisplayNameGeneration(
DisplayNameGenerator.ReplaceUnderscores.class)
class CalculatorTest { /* ... */ }Why Nested Tests?
Related tests often share context — “cart is empty” vs “cart has items.” @Nested classes group them so structure mirrors behavior.
Creating a Nested Class
Annotate an inner, non-static class with @Nested and its tests run inside the outer class’s lifecycle.
@Nested
@DisplayName("when cart is empty")
class WhenEmpty {
@Test
void totalIsZero() { assertEquals(0, cart.total()); }
}Shared Setup per Group
Each nested class can have its own @BeforeEach, setting up that group’s specific context without touching its siblings.
@Nested
class WhenHasItems {
@BeforeEach
void addItems() { cart.add(item); }
}Readable Test Reports
Together, display names and nesting produce reports that read like specs: “Calculator → when adding → adds two positives.” Intent at a glance.
Behavior-Driven Structure
This structure naturally fits a given-when-then style, so your tests double as a living behavior spec for the class under test.
Best Practices
Write self-explaining suites: name tests by behavior not method, group scenarios with @Nested, give each its own setup, aim for sentence-like reports.
Quick Check
@DisplayName or @Nested — which one builds the spec-like report?
Recap
You organized tests for clarity: @DisplayName labels them, generators automate naming, and @Nested groups scenarios into a readable spec.
Frequently asked questions
Is the “Organizing Tests with @DisplayName and Nesting” lesson free?
Yes — the full text of “Organizing Tests with @DisplayName and Nesting” is free to read here on the web, and the Testing Mastery: JUnit, Mockito & Integration Tests course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Testing Mastery: JUnit, Mockito & Integration Tests course, upgrade to CoddyKit PRO.
What will I learn in “Organizing Tests with @DisplayName and Nesting”?
Make your JUnit 5 test suites readable and well-structured using descriptive display names and nested test classes that group related scenarios. You practise Testing Mastery: JUnit, Mockito & Integration Tests with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Testing Mastery: JUnit, Mockito & Integration Tests?
No prior experience is required. Testing Mastery: JUnit, Mockito & Integration Tests on CoddyKit is structured for beginners through advanced learners; this is — lesson 4 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Organizing Tests with @DisplayName and Nesting” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Testing Mastery: JUnit, Mockito & Integration Tests lesson?
Yes. Every Testing Mastery: JUnit, Mockito & Integration Tests lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Introduction to Unit Testing
- Basic JUnit 5 Annotations
- JUnit Assertions & Execution
- Organizing Tests with @DisplayName and Nesting