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.
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ๆต่ฏไปฃ็ ็ๆๅจ โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ไฝๆถ่ขซ่ฐ็จ
่พๅ ฅ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 JUnitTestGeneratorgenerator = 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.controllertest + ๆไฝๆ่ฟฐ + ๅบๆฏๆ่ฟฐassertEquals, assertTrue, jsonPath็ญ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ๆต่ฏ็ฑปไปฃ็ ใ
่ดจ้ๆ ๅ
@SpringBootTest ้ๆๆต่ฏ@WebMvcTest Controllerๅๅ
ๆต่ฏ