📕 428커밋의 기록이 상품이 됐습니다 →
agenwiki

general

테스트 케이스 생성 프롬프트 (경계값·예외 강제)

함수나 기능 명세를 넣으면 정상·경계값·예외 케이스를 빠짐없이 뽑아 표와 테스트 코드로 돌려받는 프롬프트입니다.

발행

복사 대상 프롬프트

당신은 테스트 설계에 능한 QA 엔지니어입니다. 아래 대상의 테스트 케이스를 설계하세요. 1단계 입력 분석: 대상이 받는 입력과 상태를 나열하고, 각각의 유효 범위와 타입을 정리합니다. 2단계 케이스 도출: 동등 분할과 경계값 분석을 적용해 (가) 정상 케이스 (나) 경계 케이스 — 최솟값, 최솟값-1, 최댓값, 최댓값+1, 0, 빈 값 (다) 예외 케이스 — null, 타입 불일치, 중복 호출, 권한 없음, 외부 의존 실패 순으로 뽑습니다. 3단계 표: 각 케이스를 번호, 분류, 입력, 사전 조건, 기대 결과 열의 표로 정리합니다. 4단계 코드: {framework} 형식의 실행 가능한 테스트 코드로 옮깁니다. 테스트 이름은 무엇을 검증하는지 읽히게 짓고, 한 테스트에 한 가지만 단언합니다. 규칙: 명세에 없는 동작은 추측해 채우지 말고 '명세 확인 필요'로 표시해 따로 목록화하세요. 커버리지 숫자를 지어내지 마세요. 마지막에 놓치기 쉬운 케이스 3개를 별도로 제안하세요. 언어/프레임워크: {framework}. 검증 대상: {target}

언제 쓰나

기능은 다 만들었는데 테스트를 어디까지 써야 할지 막막할 때, 또는 이미 쓴 테스트가 정상 경로만 덮고 있을 때 씁니다. 경계값과 예외를 프롬프트가 강제로 훑기 때문에, 사람이 습관적으로 빼먹는 "빈 배열", "최댓값+1", "외부 API 실패" 같은 구멍이 먼저 드러납니다.

사용법

  1. {framework} 에 언어와 테스트 프레임워크를 적습니다. (예: TypeScript / Vitest, Python / pytest, Java / JUnit 5)
  2. {target} 자리에 검증할 함수 코드나 기능 명세를 붙여 넣습니다. 코드가 있으면 코드를, 아직 구현 전이면 명세 문장을 그대로 넣어도 됩니다.
  3. 출력의 3단계 표를 먼저 읽고 불필요한 케이스를 지운 뒤, "남긴 케이스만 코드로 다시"라고 요청하면 군더더기 없는 테스트가 나옵니다.

사용 예시

입력

언어/프레임워크: TypeScript / Vitest
검증 대상:
function splitBill(total: number, people: number): number[]
  — 금액 total 을 people 명에게 1원 단위로 나눈다.
  — 나누어떨어지지 않으면 앞사람부터 1원씩 더 부담한다.
  — people 은 1 이상이어야 한다.

출력 (요약)

| # | 분류 | 입력 | 기대 결과 |
|---|------|------|-----------|
| 1 | 정상 | (10000, 4) | [2500, 2500, 2500, 2500] |
| 2 | 정상 | (10001, 4) | [2501, 2500, 2500, 2500] |
| 3 | 경계 | (0, 3) | [0, 0, 0] |
| 4 | 경계 | (10000, 1) | [10000] |
| 5 | 예외 | (10000, 0) | 오류 — people 은 1 이상 |
| 6 | 예외 | (-100, 2) | 명세 확인 필요 (음수 정의 없음) |

test('나누어떨어지지 않으면 앞사람이 1원 더 부담한다', () => {
  expect(splitBill(10001, 4)).toEqual([2501, 2500, 2500, 2500]);
});

명세 확인 필요: 음수 total, 소수점 total, people 상한

  • 이미 테스트가 있다면 {target} 뒤에 기존 테스트 코드를 함께 넣고 "이미 덮인 케이스는 제외하고 빠진 것만"이라고 덧붙이세요.
  • "명세 확인 필요" 목록은 그대로 이슈나 PR 코멘트로 옮기면 됩니다. 대개 진짜 스펙 구멍입니다.
  • 테스트 데이터가 많이 필요하면 "3단계 표를 그대로 파라미터화 테스트(table-driven)로"라고 후속 요청하세요.

관련 글