๐ŸŽ Get the FREE AI Skills Starter Guide โ€” Subscribe โ†’
BytesAgainBytesAgain
๐Ÿฆ€ ClawHub

junit-test-generator

by @hcyyy0120

Generates JUnit 5 test classes from JSON test case files. Invoke when user wants to generate Spring Boot JUnit 5 tests from JSON test cases.

Versionv1.0.1
Downloads802
TERMINAL
clawhub install junit-test-gen

๐Ÿ“– About This Skill


name: "junit-test-generator" description: "Generates JUnit 5 test classes from JSON test case files. Invoke when user wants to generate Spring Boot JUnit 5 tests from JSON test cases."

JUnit 5 Test Generator

LLM้ฉฑๅŠจ็š„JUnit 5ๆต‹่ฏ•ไปฃ็ ็”Ÿๆˆ็ณป็ปŸใ€‚่ฏปๅ–็”ฑ"Test Case Generator"็”Ÿๆˆ็š„JSONๆ ผๅผๆต‹่ฏ•็”จไพ‹๏ผŒ่‡ชๅŠจ็”Ÿๆˆ็ฌฆๅˆSpring Bootๆœ€ไฝณๅฎž่ทตๅ’ŒJUnit 5่ง„่Œƒ็š„ๆต‹่ฏ•็ฑปๅ’Œๆต‹่ฏ•ๆ–นๆณ•ใ€‚

ๆ ธๅฟƒๅŠŸ่ƒฝ

1. JSON่งฃๆž - ่งฃๆžๆต‹่ฏ•็”จไพ‹JSONๆ–‡ไปถ๏ผŒๆๅ–ๆต‹่ฏ•ๆ•ฐๆฎใ€้ข„ๆœŸ็ป“ๆžœๅ’Œๅ…ƒๆ•ฐๆฎ 2. ๆต‹่ฏ•็ฑป็”Ÿๆˆ - ๅŸบไบŽๆต‹่ฏ•ๅฅ—ไปถ็”ŸๆˆๅฎŒๆ•ด็š„JUnit 5ๆต‹่ฏ•็ฑป 3. ๆต‹่ฏ•ๆ–นๆณ•็”Ÿๆˆ - ไธบๆฏไธชๆต‹่ฏ•็”จไพ‹็”Ÿๆˆๅฏนๅบ”็š„@Testๆ–นๆณ• 4. ๆ‰น้‡ๅฏผๅ…ฅ - ๆ”ฏๆŒๆ‰น้‡ๅค„็†ๅคšไธชๆต‹่ฏ•็”จไพ‹ๆ–‡ไปถ 5. ๅคšๅœบๆ™ฏๆ”ฏๆŒ - ๆ”ฏๆŒAPIๆŽฅๅฃๆต‹่ฏ•ใ€ๆœๅŠกๅฑ‚ๆต‹่ฏ•็ญ‰ๅคš็งๆต‹่ฏ•็ฑปๅž‹ 6. SQL่‡ชๅŠจๆ‰ง่กŒ - ่‡ชๅŠจๆ‰ง่กŒsetup/teardownไธญ็š„MySQL SQL่ฏญๅฅ

ๅทฅไฝœๆต็จ‹

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      LLM ๆ™บ่ƒฝๅฑ‚                             โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ ่งฃๆžJSONๆต‹่ฏ•็”จไพ‹  โ”‚ -> โ”‚ ๅˆ†ๆžๆต‹่ฏ•็ฑปๅž‹ๅ’Œ็ป“ๆž„           โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ ็”Ÿๆˆๆต‹่ฏ•็ฑปๆจกๆฟ    โ”‚ -> โ”‚ ็”Ÿๆˆๆต‹่ฏ•ๆ–นๆณ•ๅฎž็Žฐ             โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ ็”ŸๆˆๅฎŒๆ•ด็š„JUnit 5ๆต‹่ฏ•ไปฃ็                               โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                       Python ๆ‰ง่กŒๅฑ‚                          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ run_generator.py      โ”‚    โ”‚ testcase_parser.py        โ”‚ โ”‚
โ”‚  โ”‚ ๅ…ฅๅฃ่„šๆœฌ(ไธ€้”ฎๆ‰ง่กŒ)     โ”‚    โ”‚ ๆต‹่ฏ•็”จไพ‹JSON่งฃๆžๅ™จ        โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ jtest_generator.py    โ”‚    โ”‚                          โ”‚ โ”‚
โ”‚  โ”‚ JUnit 5ๆต‹่ฏ•ไปฃ็ ็”Ÿๆˆๅ™จ   โ”‚    โ”‚                          โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ไฝ•ๆ—ถ่ขซ่ฐƒ็”จ

  • ๅฝ“ๅทฒ็ปๆœ‰"TestCase Generator"่ฟ™ไธชskill็”Ÿๆˆ็š„JSONๆ ผๅผๆต‹่ฏ•็”จไพ‹ๆ–‡ไปถๆ—ถ๏ผŒ่ฐƒ็”จๆญคskill็”Ÿๆˆๅฏนๅบ”็š„JUnit 5ๆต‹่ฏ•็ฑปใ€‚
  • "TestCase Generator"่ฟ™ไธชskillไธปๅŠจ่ฐƒ็”จๆญคskill๏ผŒ็”Ÿๆˆๅฏนๅบ”็š„JUnit 5ๆต‹่ฏ•็ฑปใ€‚
  • ่พ“ๅ…ฅJSONๆ ผๅผ

    {
      "test_suite": "ControllerName_MethodName",
      "description": "ๆŽฅๅฃๅŠŸ่ƒฝๆ่ฟฐ",
      "interface_info": {
        "endpoint": "/api/path",
        "method": "POST",
        "content_type": "application/json",
        "function": "ๆŽฅๅฃๅŠŸ่ƒฝ่ฏดๆ˜Ž"
      },
      "request_dto": {
        "field1": "็ฑปๅž‹ - ๅญ—ๆฎต่ฏดๆ˜Ž"
      },
      "test_cases": [
        {
          "id": "TC_001",
          "name": "ๆต‹่ฏ•ๅœบๆ™ฏๆ่ฟฐ",
          "endpoint": "/api/path",
          "method": "POST",
          "headers": {"Content-Type": "application/json"},
          "body": {"field1": "value1"},
          "setup": {"mysql": [], "redis": {}},
          "expected": {"status": 200, "body": {"key": "value"}},
          "teardown": {"mysql": [], "redis": []}
        }
      ]
    }
    

    ็”Ÿๆˆ็š„ๆต‹่ฏ•็ฑป็ป“ๆž„

    package generated.tests.controller;

    import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.jdbc.core.JdbcTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory;

    import java.util.HashMap; import java.util.Map;

    import static org.junit.jupiter.api.Assertions.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

    @SpringBootTest @AutoConfigureMockMvc class ControllerNameMethodNameTest {

    private static final Logger logger = LoggerFactory.getLogger(ControllerNameMethodNameTest.class);

    @Autowired private MockMvc mockMvc;

    @Autowired private ObjectMapper objectMapper;

    @Autowired private JdbcTemplate jdbcTemplate;

    @Test void testMethodName_TC_001() throws Exception { logger.info("Executing test: TC_001 - ๆต‹่ฏ•ๅœบๆ™ฏๆ่ฟฐ");

    // Setup - ๅ‡†ๅค‡ๆต‹่ฏ•ๆ•ฐๆฎ // jdbcTemplate.execute("INSERT INTO ...");

    // Given - ๆž„ๅปบ่ฏทๆฑ‚ Map requestBody = new HashMap<>(); requestBody.put("field1", "value1");

    // When & Then - ๆ‰ง่กŒ่ฏทๆฑ‚ๅนถ้ชŒ่ฏ mockMvc.perform(post("/api/path") .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(requestBody))) .andExpect(status().isOk()) .andExpect(jsonPath("$.key").value("value")) .andDo(print());

    // Teardown - ๆธ…็†ๆต‹่ฏ•ๆ•ฐๆฎ // jdbcTemplate.execute("DELETE FROM ..."); } }

    ๆต‹่ฏ•็ฑปๅž‹ๆ”ฏๆŒ

    | ๆต‹่ฏ•็ฑปๅž‹ | ๆณจ่งฃ | ่ฏดๆ˜Ž | |---------|------|------| | APIๆŽฅๅฃๆต‹่ฏ• | @SpringBootTest @AutoConfigureMockMvc | Controllerๅฑ‚ๆต‹่ฏ• | | ๆœๅŠกๅฑ‚ๆต‹่ฏ• | @SpringBootTest | Serviceๅฑ‚ๆต‹่ฏ• | | ๅ•ๅ…ƒๆต‹่ฏ• | @ExtendWith(MockitoExtension.class) | ็บฏๅ•ๅ…ƒๆต‹่ฏ• | | ้›†ๆˆๆต‹่ฏ• | @SpringBootTest | ๅฎŒๆ•ด้›†ๆˆๆต‹่ฏ• |

    ไฝฟ็”จๆ–นๆณ•

    ๆ–นๅผไธ€: ไฝฟ็”จๅ…ฅๅฃ่„šๆœฌ๏ผˆๆŽจ่๏ผ‰

    # ่ฟ›ๅ…ฅskill็›ฎๅฝ•
    cd .trae/skills/junit-test-generator/scripts

    ไธ€้”ฎ็”Ÿๆˆๆต‹่ฏ•็ฑป

    python run_generator.py [output_dir]

    ็คบไพ‹

    python run_generator.py test_cases.json python run_generator.py test_cases.json src/test/java

    ๆ–นๅผไบŒ: Python API่ฐƒ็”จ

    from jtest_generator import JUnitTestGenerator

    generator = JUnitTestGenerator(package_name="your.package.name") java_code = generator.generate(test_suite)

    ๅฎŒๆ•ดๆต‹่ฏ•ๆ‰ง่กŒๆต็จ‹

    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚                    ๅฎŒๆ•ดๆต‹่ฏ•ๆ‰ง่กŒๆต็จ‹                            โ”‚
    โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
    โ”‚  1. testcase-generator: ็”Ÿๆˆๆต‹่ฏ•็”จไพ‹JSON                     โ”‚
    โ”‚             โ†“                                                โ”‚
    โ”‚  2. ๆœฌskill: ่งฃๆžJSONๅนถ็”ŸๆˆJUnit 5ๆต‹่ฏ•็ฑป                     โ”‚
    โ”‚             โ†“                                                โ”‚
    โ”‚  3. ๅ†™ๅ…ฅ src/test/java ็›ฎๅฝ•                                 โ”‚
    โ”‚             โ†“                                                โ”‚
    โ”‚  4. mvn test [-Dtest=ClassName] ๆ‰ง่กŒๆต‹่ฏ•                    โ”‚
    โ”‚             โ†“                                                โ”‚
    โ”‚  5. ๆŸฅ็œ‹ target/surefire-reports/ ๆต‹่ฏ•็ป“ๆžœ                  โ”‚
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
    

    Mavenๆต‹่ฏ•ๅ‘ฝไปค

    | ๅ‘ฝไปค | ่ฏดๆ˜Ž | |------|------| | mvn test | ๆ‰ง่กŒๆ‰€ๆœ‰ๆต‹่ฏ• | | mvn test -Dtest=ClassName | ๆ‰ง่กŒๆŒ‡ๅฎšๆต‹่ฏ•็ฑป | | mvn test -Dtest=ClassName#methodName | ๆ‰ง่กŒๆŒ‡ๅฎšๆต‹่ฏ•ๆ–นๆณ• | | mvn test -Dspring.profiles.active=test | ไฝฟ็”จtest้…็ฝฎๆ‰ง่กŒ | | mvn test verify | ๆ‰ง่กŒๆต‹่ฏ•ๅนถ้ชŒ่ฏ |

    ๆต‹่ฏ•็ป“ๆžœๆŸฅ็œ‹

  • target/surefire-reports/ - ๆต‹่ฏ•ๆ‰ง่กŒๆŠฅๅ‘Š (XML/TXT)
  • ๆŽงๅˆถๅฐ็›ดๆŽฅ่พ“ๅ‡บๆต‹่ฏ•็ป“ๆžœ
  • ็”Ÿๆˆ็š„ไปฃ็ ่ง„่Œƒ

  • ๅŒ…ๅ: ๅฏ้…็ฝฎ๏ผŒ้ป˜่ฎค generated.tests.controller
  • ็ฑปๅ: PascalCase + "Test"ๅŽ็ผ€๏ผŒ่‡ชๅŠจ็งป้™คไธญๆ–‡ๅญ—็ฌฆๅ’Œ้žASCIIๅญ—็ฌฆ
  • ๆ–นๆณ•ๅ: test + ๆ“ไฝœๆ่ฟฐ + ๅœบๆ™ฏๆ่ฟฐ
  • ๆ–ญ่จ€: ไฝฟ็”จassertEquals, assertTrue, jsonPath็ญ‰
  • ๆณจ้‡Š: ๅŒ…ๅซๆต‹่ฏ•็”จไพ‹IDๅ’Œๆ่ฟฐ
  • Endpoint: ่‡ชๅŠจๆธ…็†context-path๏ผˆๅฆ‚ๆžœ่ทฏๅพ„ๆฎตๆ•ฐ>2๏ผ‰
  • LLMๆ็คบ่ฏๆจกๆฟ

    ๆต‹่ฏ•ไปฃ็ ็”Ÿๆˆๆ็คบ่ฏ

    ไฝ ๆ˜ฏไธ€ไธชๆต‹่ฏ•ๅทฅ็จ‹ๅธˆใ€‚่ฏทๆ นๆฎไปฅไธ‹JSONๆต‹่ฏ•็”จไพ‹๏ผŒ็”Ÿๆˆ็ฌฆๅˆJUnit 5่ง„่Œƒ็š„Spring Bootๆต‹่ฏ•ไปฃ็ ใ€‚

    ๆต‹่ฏ•ๅฅ—ไปถไฟกๆฏ

  • ๆต‹่ฏ•ๅฅ—ไปถๅ: {test_suite_name}
  • ๆ่ฟฐ: {description}
  • ๆŽฅๅฃ่ทฏๅพ„: {endpoint}
  • HTTPๆ–นๆณ•: {method}
  • ๆต‹่ฏ•็”จไพ‹ๆ•ฐๆฎ

    {test_cases_json}

    ็”Ÿๆˆ่ฆๆฑ‚

    1. ไฝฟ็”จJUnit 5ๆณจ่งฃ (@Test, @BeforeEach, @AfterEach) 2. ไฝฟ็”จ@SpringBootTestๅ’Œ@AutoConfigureMockMvc่ฟ›่กŒAPIๆต‹่ฏ• 3. ไฝฟ็”จMockMvc่ฟ›่กŒHTTP่ฏทๆฑ‚ๆจกๆ‹Ÿ 4. ไฝฟ็”จjsonPath่ฟ›่กŒๅ“ๅบ”ๆ–ญ่จ€ 5. ๅœจๆต‹่ฏ•ๆ–นๆณ•ๆณจ้‡ŠไธญๅŒ…ๅซๆต‹่ฏ•็”จไพ‹IDๅ’Œๆ่ฟฐ 6. ้ตๅพชSpring Bootๆœ€ไฝณๅฎž่ทต

    ่ฏท็”ŸๆˆๅฎŒๆ•ด็š„Javaๆต‹่ฏ•็ฑปไปฃ็ ใ€‚

    ่ดจ้‡ๆ ‡ๅ‡†

  • โœ… ็”Ÿๆˆ็š„ๆต‹่ฏ•็ฑป็ฌฆๅˆJUnit 5่ง„่Œƒ
  • โœ… ๆ”ฏๆŒSpring Boot @SpringBootTest ้›†ๆˆๆต‹่ฏ•
  • โœ… ๆ”ฏๆŒ@WebMvcTest Controllerๅ•ๅ…ƒๆต‹่ฏ•
  • โœ… ๆญฃ็กฎๅค„็†HTTP่ฏทๆฑ‚ๅ’Œๅ“ๅบ”ๆ–ญ่จ€
  • โœ… ๆต‹่ฏ•ๆ–นๆณ•ๅ‘ฝๅๆธ…ๆ™ฐๆ่ฟฐๆต‹่ฏ•ๆ„ๅ›พ
  • โœ… ๅŒ…ๅซๅฟ…่ฆ็š„setup/teardown้€ป่พ‘
  • โœ… ่‡ชๅŠจๆ‰ง่กŒsetupไธญ็š„MySQL SQL่ฏญๅฅ๏ผˆๆต‹่ฏ•ๆ•ฐๆฎๅ‡†ๅค‡๏ผ‰
  • โœ… ่‡ชๅŠจๆ‰ง่กŒteardownไธญ็š„MySQL SQL่ฏญๅฅ๏ผˆๆต‹่ฏ•ๆ•ฐๆฎๆธ…็†๏ผ‰
  • โœ… ไฝฟ็”จJdbcTemplateๆ‰ง่กŒๅŽŸ็”ŸSQL่ฏญๅฅ
  • โœ… ไฝฟ็”จSLF4J Logger่ฎฐๅฝ•ๆต‹่ฏ•ๆ‰ง่กŒๆ—ฅๅฟ—
  • โœ… ่‡ชๅŠจ็งป้™คendpointไธญ็š„context-path
  • โœ… ็ฑปๅ่‡ชๅŠจ็งป้™คไธญๆ–‡ๅญ—็ฌฆ
  • ็‰ˆๆœฌไฟกๆฏ

  • ็‰ˆๆœฌ: 2.1.0
  • ๅˆ›ๅปบๆ—ฅๆœŸ: 2026-03-20
  • ๆ›ดๆ–ฐๆ—ฅๆœŸ: 2026-03-25
  • ่ฎพ่ฎก็†ๅฟต: ไปŽJSONๅˆฐJUnit 5ๆต‹่ฏ•ไปฃ็ ็š„่‡ชๅŠจๅŒ–่ฝฌๆข๏ผŒๆ”ฏๆŒๅฎŒๆ•ด็š„ๆต‹่ฏ•ๆ•ฐๆฎsetup/teardown๏ผŒ้€š็”จๅŒ–่ฎพ่ฎก้€‚็”จไบŽไปปไฝ•Spring Boot้กน็›ฎ