---
name: backend-test-generator
description: Spring Boot 1�� `� tXX � L��@ �i L��| JUnit 5@ Mockito| ��X� �1X� ��. Controller, Service, Repository t��  \ L��| ��<\ �1Xp� �pt�i��.
allowed-tools: Read, Grep, Glob
---

# Backend Test Generator (Spring Boot)

t ��@ Spring Boot 1�� T�| �X� JUnit 5@ Mockito| ��\ L�� T�| ��<\ �1i��.

## �� �

### L�� ��

- **� L��**: Controller, Service, Repository � t� L��
- **�i L��**: API ���x� �i L�� (@SpringBootTest)

### �� ��

- **��l**: Spring Boot 2.x/3.x
- **L�� �l**: JUnit 5, Mockito, MockMvc, TestRestTemplate
- **L� �l**: Maven, Gradle
- **��**: Java, Kotlin

## � \8�

### 1��: ���m �  �

Git diff| �t �� |D Ux:

```bash
git diff HEAD
git status --short
```

�L (4<\ 1�� |D �� �X:

- **Controller**: `*Controller.java`, `src/main/java/**/controller/**`
- **Service**: `*Service.java`, `*ServiceImpl.java`, `src/main/java/**/service/**`
- **Repository**: `*Repository.java`, `src/main/java/**/repository/**`
- **Entity**: `*Entity.java`, `src/main/java/**/entity/**`, `src/main/java/**/domain/**`

### 2��: T� �

��  |D }� �L ��| E:

- �\ �  T�
- �� T� ��Ș
- �\� REST ���x� (@GetMapping, @PostMapping �)
- �� D�Ȥ \�
- DTO  Entity ���m
- Xt1 �� ���m

### 3��: L�� � �

| ��� 0| \ L�� \�D �:

#### Controller L��

- **\�**: `templates/controller-test.md` 8�
- **�l**: MockMvc, @WebMvcTest
- **��**: HTTP �� T�, Q� , �T

#### Service L��

- **\�**: `templates/service-test.md` 8�
- **�l**: Mockito, @ExtendWith(MockitoExtension.class)
- **��**: D�Ȥ \�, x ��, ���X

#### Repository L��

- **\�**: `templates/repository-test.md` 8�
- **�l**: @DataJpaTest, TestEntityManager
- **��**: CRUD ��, �@ ��

#### �i L��

- **\�**: `templates/integration-test.md` 8�
- **�l**: @SpringBootTest, TestRestTemplate
- **��**: � API \�

### 4��: L�� | �1/�pt�

#### L�� | X �Y

Spring Boot \  lp| 0�:

- `src/main/java/com/example/UserController.java` � `src/test/java/com/example/UserControllerTest.java`
- `src/main/java/com/example/UserService.java` � `src/test/java/com/example/UserServiceTest.java`
- `src/main/java/com/example/UserRepository.java` � `src/test/java/com/example/UserRepositoryTest.java`

#### L�� t�� �� �Y

- � L��: `{ClassName}Test.java`
- �i L��: `{ClassName}IntegrationTest.java`

#### 0t L�� |t �� ��

1.  |D }� � L�� T� E
2.  �� T�� ް L�� �pt�
3.  �\� 0��  \ L�� � 
4.  Deprecated L�� p
5.  \� �   Ux

### 5��: �� �� �1

�L �<\ ��| ��:

```
=
 ���m �� D�

=� � �� |:
  - src/main/java/com/example/UserController.java (Controller)
  - src/main/java/com/example/UserService.java (Service)

� L�� �1 ...

 �1 D�:
  - src/test/java/com/example/UserControllerTest.java (5 test cases)
      testGetUser_Success
      testGetUser_NotFound
      testCreateUser_Success
      testCreateUser_ValidationError
      testDeleteUser_Success

  - src/test/java/com/example/UserServiceTest.java (6 test cases)
      testFindUserById_Success
      testFindUserById_NotFound
      testCreateUser_Success
      testCreateUser_DuplicateEmail
      testUpdateUser_Success
      testDeleteUser_Success

=� L�� 䄬� �: 85%
```

## L�� �� �l���

�1 �� L��� �L 0 D �qt| i��:

### �� 0 

- [ ] L�� T܅t �UX� $� (test{MethodName}\_{Scenario} (4)
- [ ] Given-When-Then (4  
- [ ] L��  Žt� � XtX� JL
- [ ] Mock/Stubt X� ��(
- [ ] ��  t�| ��

### Controller L�� 0 

- [ ] MockMvc| ��X� HTTP �� L��
- [ ] ��/Q� �,T ��
- [ ] x x�� L�� (@ControllerAdvice)
- [ ] x�/x  L�� (Security � �)

### Service L�� 0 

- [ ] D�Ȥ \� ��
- [ ] Repository Xt1 Mocking
- [ ] ���X ّ Ux
- [ ] �@ x �� L��

### Repository L�� 0 

- [ ] @DataJpaTest ��
- [ ] CRUD �� ��
- [ ] �@ �� T� L��
- [ ] } pt ��

## �� �

```
# �� � 8�
backend-test-generator

# �� ��
"UserController�  \ L�� �1t"
"1�� ���m�  \ L�� �1t"
"UserService L�� �pt�t"
```

## �X�m

1. **Mock ��**: � DB� x� API| 8�X� J�] Mock ��
2. **L�� ��**:  L��� Ž<\ �  �t| h
3. **`x �**: � L��� `t� ��| h
4. **X� �� L��**: � 䄬� �t D� �� ��
5. **Spring Context**: �D�X� � �M��| \�X� JL

## D Xt1

### Maven (pom.xml)

```xml
<dependencies>
    <!-- JUnit 5 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- Mockito -->
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- H2 Database for testing -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
```

### Gradle (build.gradle)

```groovy
dependencies {
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.mockito:mockito-core'
    testRuntimeOnly 'com.h2database:h2'
}
```

## 8� ��

�8\ \�� � �L |�D 8�X8�:

- `templates/controller-test.md` - Controller L�� \�
- `templates/service-test.md` - Service L�� \�
- `templates/repository-test.md` - Repository L�� \�
- `templates/integration-test.md` - �i L�� \�
- `references/spring-boot-testing-guide.md` - Spring Boot L��  t�
