Skip to content
This repository was archived by the owner on Feb 17, 2026. It is now read-only.

Test Status

Stan edited this page Dec 9, 2025 · 3 revisions

test_status 섀계 원칙

ν…ŒμŠ€νŠΈ μƒνƒœ ν•„λ“œμ˜ 섀계 μ² ν•™κ³Ό λΆ„λ₯˜ κΈ°μ€€

μ •μ˜

test_statusλŠ” ν…ŒμŠ€νŠΈμ˜ μ‹€ν–‰ λ™μž‘μ„ λ‚˜νƒ€λ‚΄λŠ” ν•„λ“œλ‹€.

핡심 원칙

1. Status β‰  Attribute

ꡬ뢄 μ •μ˜ 포함 μ—¬λΆ€
Status μ‹€ν–‰ λ™μž‘μ— 직접 영ν–₯ βœ… 포함
Attribute λΆ„λ₯˜μš© 메타데이터 ❌ μ œμ™Έ
  • Status 예: active, skipped, xfail
  • Attribute 예: slow, flaky, smoke, integration

test_statusμ—λŠ” μ‹€ν–‰ λ™μž‘μ— 영ν–₯을 μ£ΌλŠ” κ²ƒλ§Œ ν¬ν•¨ν•œλ‹€.

2. First Principles λΆ„λ₯˜

λͺ¨λ“  ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬μ— μ μš©λ˜λŠ” 근본적 질문:

Q1. μ‹€ν–‰λ˜λŠ”κ°€?
    β”œβ”€ YES β†’ Q2. μ˜ˆμƒ κ²°κ³ΌλŠ”?
    β”‚         β”œβ”€ 성곡 κΈ°λŒ€ β†’ active, focused
    β”‚         └─ μ‹€νŒ¨ κΈ°λŒ€ β†’ xfail
    β”‚
    └─ NO  β†’ Q3. μ™œ μ‹€ν–‰ μ•ˆ λ˜λŠ”κ°€?
              β”œβ”€ μ˜λ„μ  μ œμ™Έ β†’ skipped
              └─ 아직 λ―Έκ΅¬ν˜„ β†’ todo

3. ENUM은 보편적 행동, modifierλŠ” ν”„λ ˆμž„μ›Œν¬ ν‘œν˜„

  • ENUM: λͺ¨λ“  ν”„λ ˆμž„μ›Œν¬μ—μ„œ 곡톡인 "μ‹€ν–‰ 행동" (5개둜 μΆ©λΆ„)
  • modifier: ν”„λ ˆμž„μ›Œν¬λ³„ 원본 ν‘œν˜„ 보쑴 (skip, fixme, ignore λ“±)

5κ°€μ§€ μƒνƒœ

Status μ‹€ν–‰ κΈ°λŒ€ κ²°κ³Ό μš©λ„
active βœ… 성곡 정상 ν…ŒμŠ€νŠΈ
skipped β›” - μ˜λ„μ  μ œμ™Έ
todo β›” - λ―Έκ΅¬ν˜„
focused βœ… 성곡 λ””λ²„κΉ…μš© (.only)
xfail βœ… μ‹€νŒ¨ μ•Œλ €μ§„ 버그/μ‹€νŒ¨ μ˜ˆμƒ

λΆ„λ₯˜ κΈ°μ€€

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚            ν…ŒμŠ€νŠΈ μ‹€ν–‰ λ™μž‘                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  [싀행됨]              [μ‹€ν–‰ μ•ˆ 됨]          β”‚
β”‚  β”œβ”€ active (성곡 κΈ°λŒ€)  β”œβ”€ skipped (μ œμ™Έ)   β”‚
β”‚  β”œβ”€ focused (디버깅)    └─ todo (λ―Έκ΅¬ν˜„)    β”‚
β”‚  └─ xfail (μ‹€νŒ¨ κΈ°λŒ€)                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

ν”„λ ˆμž„μ›Œν¬λ³„ λ§€ν•‘

JavaScript/TypeScript (Jest, Vitest, Playwright)

ν”„λ ˆμž„μ›Œν¬ ν‘œν˜„ status modifier
test(), it() active -
test.skip(), it.skip() skipped skip
xit(), xdescribe() skipped xit, xdescribe
test.todo() todo todo
test.only(), it.only() focused only
fit(), fdescribe() focused fit, fdescribe
test.failing() (Vitest) xfail failing
test.fixme() (Playwright) skipped fixme

Python (pytest, unittest)

ν”„λ ˆμž„μ›Œν¬ ν‘œν˜„ status modifier
def test_*() active -
@pytest.mark.skip skipped skip
@pytest.mark.skipif skipped skipif
@pytest.mark.xfail xfail xfail
@unittest.skip skipped skip
@unittest.expectedFailure xfail expectedFailure

Go (testing)

ν”„λ ˆμž„μ›Œν¬ ν‘œν˜„ status modifier
func Test*() active -
t.Skip() skipped skip

Ruby (RSpec)

ν”„λ ˆμž„μ›Œν¬ ν‘œν˜„ status modifier
it "..." active -
skip, xit skipped skip, xit
pending xfail pending
fit, fdescribe focused fit, fdescribe

⚠️ RSpec의 pending은 싀행됨 (λ‹€λ₯Έ ν”„λ ˆμž„μ›Œν¬μ˜ pendingκ³Ό 닀름)

Java/Kotlin (JUnit, Kotest)

ν”„λ ˆμž„μ›Œν¬ ν‘œν˜„ status modifier
@Test active -
@Ignore (JUnit 4) skipped Ignore
@Disabled (JUnit 5) skipped Disabled
f:test (Kotest) focused focused

Rust

ν”„λ ˆμž„μ›Œν¬ ν‘œν˜„ status modifier
#[test] active -
#[ignore] skipped ignore
#[should_panic] xfail should_panic

modifier ν•„λ“œμ˜ μ—­ν• 

μ—­ν•  μ„€λͺ…
원본 보쑴 @pytest.mark.skip β†’ modifier: skip
μ„ΈλΆ€ ꡬ뢄 skipped의 fixme vs skip ꡬ뢄
ν™•μž₯μ„± μƒˆ 마컀 μΆ”κ°€ μ‹œ ENUM λ³€κ²½ λΆˆν•„μš”

섀계 κ·Όκ±°

  1. 5개면 μΆ©λΆ„ν•˜λ‹€: ν…ŒμŠ€νŠΈ μ‹€ν–‰ λ™μž‘μ˜ λͺ¨λ“  경우의 수λ₯Ό 컀버
  2. ENUM 변경은 λΉ„μ‹Έλ‹€: DB νžˆμŠ€ν† λ¦¬ λˆ„μ  μ‹œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ λΉ„μš© 급증
  3. modifier둜 ν™•μž₯ν•œλ‹€: μƒˆ ν”„λ ˆμž„μ›Œν¬ 지원 μ‹œ μ½”λ“œλ§Œ μˆ˜μ •

μž‘μ„±μΌ: 2025-12-09