Claude Agent Skill · by Github

Java Junit

This covers JUnit 5 fundamentals through advanced parameterized testing patterns. It's solid for teams standardizing on testing conventions or developers moving

Install
Terminal · npx
$npx skills add https://github.com/github/awesome-copilot --skill java-junit
Works with Paperclip

How Java Junit fits into a Paperclip company.

Java Junit drops into any Paperclip agent that handles this kind of work. Assign it to a specialist inside a pre-configured PaperclipOrg company and the skill becomes available on every heartbeat — no prompt engineering, no tool wiring.

S
SaaS FactoryPaired

Pre-configured AI company — 18 agents, 18 skills, one-time purchase.

$27$59
Explore pack
Source file
SKILL.md63 lines
Expand
---name: java-junitdescription: 'Get best practices for JUnit 5 unit testing, including data-driven tests'--- # 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.