界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
开发与工程 · SKILL.md

junit

junit

【开发与工程】JUnit 5 testing framework with Mockito integration. Covers unit tests, mocking, and Spring Boot test integration. USE WHEN: user mentions "junit", "java test", "mockito", asks about "@Test", "@Mock", "@InjectMocks", "unit test java", "spring boot test" DO NOT USE FOR: Integration tests with containers - use `testcontainers`; REST API tests - use `r…

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: junit description: | JUnit 5 testing framework with Mockito integration. Covers unit tests, mocking, and Spring Boot test integration.

USE WHEN: user mentions "junit", "java test", "mockito", asks about "@Test", "@Mock", "@InjectMocks", "unit test java", "spring boot test"

DO NOT USE FOR: Integration tests with containers - use testcontainers; REST API tests - use rest-assured; E2E tests - use Selenium; JavaScript/TypeScript - use vitest or jest allowed-tools: Read, Grep, Glob, Write, Edit

JUnit 5 - Quick Reference

Deep Knowledge: Use mcp__documentation__fetch_docs with technology: junit for comprehensive documentation.

When NOT to Use This Skill

  • Integration Tests with Containers - Use testcontainers for Docker-based tests
  • REST API Testing - Use rest-assured for HTTP/REST testing
  • E2E Web Testing - Use Selenium or Playwright
  • JavaScript/TypeScript - Use vitest or jest for JS/TS
  • Database Integration Tests - Combine with spring-boot-integration skill

Essential Patterns

Basic Test

@Test
void shouldAddNumbers() {
    assertEquals(5, calculator.add(2, 3));
    assertThrows(ArithmeticException.class, () -> calculator.divide(10, 0));
}

Mockito + Service Test

@ExtendWith(MockitoExtension.class)
class UserServiceTest {

    @Mock
    private UserRepository userRepository;

    @InjectMocks
    private UserServiceImpl userService;

    @Test
    void shouldCreateUser() {
        when(userRepository.save(any())).thenReturn(user);

        UserResponse result = userService.create(request);

        assertNotNull(result);
        verify(userRepository, times(1)).save(any());
    }
}

Spring Boot Test

@SpringBootTest
@ActiveProfiles("test")
class UserServiceIntegrationTest {

    @Autowired
    private UserService userService;

    @MockBean
    private UserRepository userRepository;

    @Test
    void contextLoads() {
        assertNotNull(userService);
    }
}

Controller Test

@WebMvcTest(UserController.class)
class UserControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private UserService userService;

    @Test
    void shouldReturnUsers() throws Exception {
        when(userService.findAll()).thenReturn(users);

        mockMvc.perform(get("/api/v1/users"))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$[0].name").value("John"));
    }
}

Repository Test

@DataJpaTest
class UserRepositoryTest {

    @Autowired
    private TestEntityManager entityManager;

    @Autowired
    private UserRepository userRepository;

    @Test
    void shouldFindByEmail() {
        entityManager.persist(user);
        Optional<User> found = userRepository.findByEmail("john@email.com");
        assertTrue(found.isPresent());
    }
}

Common Annotations

AnnotationUsage
@TestTest method
@BeforeEachSetup before each test
@MockCreates mock
@InjectMocksInjects mocks
@SpringBootTestIntegration test
@WebMvcTestController test
@DataJpaTestRepository test

Anti-Patterns

Anti-PatternWhy It's BadSolution
Using @SpringBootTest for unit testsExtremely slowUse @ExtendWith(MockitoExtension.class)
Testing private methodsCoupled to implementationTest through public API
No mock cleanupTests affect each otherUse @BeforeEach, Mockito.reset()
Hardcoded test dataHard to maintainUse test data builders or factories
Not verifying mock interactionsSilent failuresUse verify() to ensure methods called
Too many assertions per testHard to debugOne logical assertion per test
Ignoring @Disabled testsTechnical debt accumulatesFix or remove disabled tests

Quick Troubleshooting

ProblemLikely CauseSolution
"NullPointerException in test"Mock not injectedCheck @Mock and @InjectMocks annotations
"Wanted but not invoked"Method not called or wrong argsVerify method call, check argument matchers
Test takes too longUsing @SpringBootTest unnecessarilyUse Mockito for unit tests
"UnnecessaryStubbingException"Mock setup but not usedRemove unused when() statements
Flaky testShared state or timingIsolate setup, avoid Thread.sleep
"No tests found"Wrong naming conventionUse test* prefix or @Test annotation

Reference Documentation

我的收藏