Catalog
github/java-junit

github

java-junit

Get best practices for JUnit 5 unit testing, including data-driven tests

v1.0Latest
New~735Updated Jun 26, 2026

JUnit 5+ Best Practices

Your goal is to help me write effective unit tests with JUnit 5, covering both standard and data-driven testing approaches.

Project Setup

  • Use a standard Maven or Gradle project structure.
  • Place test source code in src/test/java.
  • Include dependencies for junit-jupiter-api, junit-jupiter-engine, and junit-jupiter-params for parameterized tests.
  • Use build tool commands to run tests: mvn test or gradle test.

Test Structure

  • Test classes should have a Test suffix, e.g., CalculatorTest for a Calculator class.
  • Use @Test for test methods.
  • Follow the Arrange-Act-Assert (AAA) pattern.
  • Name tests using a descriptive convention, like methodName_should_expectedBehavior_when_scenario.
  • Use @BeforeEach and @AfterEach for per-test setup and teardown.
  • Use @BeforeAll and @AfterAll for per-class setup and teardown (must be static methods).
  • Use @DisplayName to provide a human-readable name for test classes and methods.

Standard Tests

  • Keep tests focused on a single behavior.
  • Avoid testing multiple conditions in one test method.
  • Make tests independent and idempotent (can run in any order).
  • Avoid test interdependencies.

Data-Driven (Parameterized) Tests

  • Use @ParameterizedTest to mark a method as a parameterized test.
  • Use @ValueSource for simple literal values (strings, ints, etc.).
  • Use @MethodSource to refer to a factory method that provides test arguments as a Stream, Collection, etc.
  • Use @CsvSource for inline comma-separated values.
  • Use @CsvFileSource to use a CSV file from the classpath.
  • Use @EnumSource to use enum constants.

Assertions

  • Use the static methods from org.junit.jupiter.api.Assertions (e.g., assertEquals, assertTrue, assertNotNull).
  • For more fluent and readable assertions, consider using a library like AssertJ (assertThat(...).is...).
  • Use assertThrows or assertDoesNotThrow to test for exceptions.
  • Group related assertions with assertAll to ensure all assertions are checked before the test fails.
  • Use descriptive messages in assertions to provide clarity on failure.

Mocking and Isolation

  • Use a mocking framework like Mockito to create mock objects for dependencies.
  • Use @Mock and @InjectMocks annotations from Mockito to simplify mock creation and injection.
  • Use interfaces to facilitate mocking.

Test Organization

  • Group tests by feature or component using packages.
  • Use @Tag to categorize tests (e.g., @Tag("fast"), @Tag("integration")).
  • Use @TestMethodOrder(MethodOrderer.OrderAnnotation.class) and @Order to control test execution order when strictly necessary.
  • Use @Disabled to temporarily skip a test method or class, providing a reason.
  • Use @Nested to group tests in a nested inner class for better organization and structure.
Files1
1 files · 1.0 KB

Select a file to preview

Overall Score

80/100

Grade

B

Good

Safety

95

Quality

75

Clarity

82

Completeness

72

Summary

This skill provides best practices guidance for writing unit tests with JUnit 5, covering standard test structure, data-driven parameterized tests, assertions, mocking, and test organization. It instructs agents on how to create effective, maintainable test suites using Maven/Gradle project structures without executing code or modifying files.

Detected Capabilities

Code generation guidanceTest pattern referenceBuild tool command execution (mvn test, gradle test)Best practices documentation

Trigger Keywords

Phrases that MCP clients use to match this skill to user intent.

write junit testsparameterized testingtest structuremockito mockingdata-driven tests

Use Cases

  • Write standard JUnit 5 unit tests following AAA pattern
  • Create parameterized data-driven tests using @ParameterizedTest and sources
  • Configure Mockito for dependency mocking and isolation
  • Organize tests using tags, nesting, and execution order controls
  • Choose appropriate assertion strategies with built-in or AssertJ libraries
  • Structure test projects with proper directory layout and naming conventions

Quality Notes

  • Clear structure with logical sections organized by testing concern (setup, structure, standard tests, parameterized tests, etc.)
  • Practical examples of annotation usage (@Test, @ParameterizedTest, @BeforeEach, etc.) with context
  • Covers both basic and advanced topics (nested tests, tagging, execution order)
  • Naming conventions and patterns are explicit and actionable (e.g., CalculatorTest, methodName_should_expectedBehavior_when_scenario)
  • Addresses real concerns: test independence, avoiding interdependencies, assertion clarity
  • Recommends libraries (AssertJ, Mockito) for better expressiveness without mandating them
  • No hands-on examples or code templates provided — skill is conceptual guidance only, not executable
  • Could be strengthened by providing code snippets or template files to accelerate test writing
Model: claude-haiku-4-5-20251001Analyzed: Jun 26, 2026

Reviews

Add this skill to your library to leave a review.

No reviews yet

Be the first to share your experience.

Use github/java-junit in your dev environment

Command Palette

Search for a command to run...