본문으로 건너뛰기
cccskills
무료GitHub에 공개

java-testing-junit-mockito

Use when writing tests for Java (Quarkus or Spring) code - JUnit Jupiter structure, Mockito for collaborators, test slices, Testcontainers, and framework-native integration tests, test-first

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

연동 도구PostgreSQL
설치 방법 보기

포함된 파일(1)

  • SKILL.md4.4 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Java Testing (JUnit Jupiter + Mockito)

Overview

Test-first in Java, same discipline as everywhere (see tdd-workflow): write the failing test, watch it fail, minimal code to pass. This skill is the Java mechanics for that cycle.

Core principle: Unit-test the domain and services as plain Java without booting the framework. Reserve framework-integration tests for the boundary (HTTP, persistence).

Test levels

LevelWhat it coversTools
UnitDomain entity / value object, no mocksJUnit Jupiter
Unit with mocksService (mock its ports)JUnit Jupiter + Mockito
Persistence sliceRepository against a real DB, no HTTP layer@DataJpaTest (Spring) + Testcontainers @ServiceConnection; Quarkus @QuarkusTest with Dev Services
Web sliceController/resource wiring, serialization, validation — mocked service@WebMvcTest (Spring); Quarkus @QuarkusTest + @InjectMock
End-to-endFull app boot, real DB, real HTTP@SpringBootTest(webEnvironment=RANDOM_PORT) + RestTestClient (Spring Boot 4); @QuarkusTest + RestAssured

Most tests are the first two — fast, no container. Boot the framework only where you're testing wiring, serialization, or SQL; reach for the narrowest slice that proves it before a full @SpringBootTest/plain @QuarkusTest.

JUnit Jupiter + Mockito unit test

class TaskServiceTest {
    private final TaskRepository repo = mock(TaskRepository.class);
    private final TaskService service = new TaskService(repo);   // constructor injection pays off

    @Test
    void create_persists_and_returns_task() {
        Task t = service.create("Write the report");
        verify(repo).persist(any(Task.class));   // or save(...) for Spring
        assertEquals("Write the report", t.title());
    }

    @Test
    void create_rejects_blank_title() {
        assertThrows(InvalidTaskTitle.class, () -> service.create("  "));
        verifyNoInteractions(repo);              // invalid input never hits the DB
    }
}

Rules

  • Mock collaborators (ports), never the class under test. A test whose asserts only exercise the mock proves nothing — assert on the real object's behavior/return.
  • One behavior per @Test, named for the behavior (create_rejects_blank_title).
  • Prefer real value objects over mocking them — they're cheap to construct.
  • @ParameterizedTest for boundary tables (200 chars ok, 201 rejected).
  • Integration tests use Testcontainers for a real Postgres, not H2 — test against the DB you deploy on. Seed per test with the repository's real migrations plus minimal inserts; never share state between tests.
  • AssertJ (assertThat(...)) is fine and reads well; match the repo's existing assertion style.
  • Spring Boot 4: @MockitoBean/@MockitoSpyBean replace @MockBean/@SpyBean, which were removed in Boot 4.0 — use the old annotations only on a repo still pinned to Boot 3.x.
  • Quarkus: @InjectMock inside a @QuarkusTest for a CDI-bean mock; RestAssured for the HTTP-level assertion: given().when().post("/tasks").then().statusCode(201).
  • Testcontainers Java 2.x coordinates: artifacts are prefixed testcontainers-* (e.g. org.testcontainers:testcontainers-postgresql), class org.testcontainers.postgresql.PostgreSQLContainer; JUnit 4 support was removed, Jupiter only.
  • On JDK 21+, register mockito-core as a -javaagent in the build's surefire/failsafe config if the repo doesn't already, to avoid the dynamic-agent-loading warning.

Common Mistakes

  • @SpringBootTest/plain @QuarkusTest on everything — slow, and hides design problems that plain unit tests would surface.
  • Mocking the service you're testing.
  • Asserting verify(mock) only, never checking the returned/observable value.
  • H2 in tests but Postgres in prod — dialect gaps ship bugs.
  • Using @MockBean on a Spring Boot 4 repo (removed; use @MockitoBean).

Red Flags

  • The test passes without the production code being written (it tests the mock).
  • A unit test that needs a running database.
  • No failing-first run — you wrote the test after the code.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

makifbaysal/tasktrooper1172026년 10월 18일 업데이트

Use when the diff adds or changes an endpoint, resolver, RPC, job or query that takes an object id, a role check, a request binding or a tenant filter - BOLA/IDOR, function-level authorization, mass assignment and tenant scoping

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

makifbaysal/tasktrooper1172026년 10월 18일 업데이트

Use on every UI change - semantic HTML, labels for controls, keyboard-navigable dialogs/menus, visible focus, and never color as the only signal

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

makifbaysal/tasktrooper1172026년 10월 18일 업데이트

Use when a task changes any screen, form, dialog, menu or control - Lighthouse/axe scan of the changed screens, a keyboard walk, and the thresholds that fail a task

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

makifbaysal/tasktrooper1172026년 10월 18일 업데이트

How to work a task returned with review, QA or UAT findings. Use when a task is in need_revision or PR review comments are in your context.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

makifbaysal/tasktrooper1172026년 10월 18일 업데이트

Use when the repository keeps its alerting in code, or a person asks for alerts outside TaskTrooper - PrometheusRule YAML, a Cloud Monitoring alert policy in Terraform, a Datadog monitor, each routed to TaskTrooper's alert ingest URL so it opens an incident here

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

makifbaysal/tasktrooper1172026년 10월 18일 업데이트

makifbaysal의 스킬 모두 보기

이 스킬의 문제 신고