Unit tests - minsuk-jang/teamproject GitHub Wiki

ν…ŒμŠ€νŠΈλŠ” 크게 unit ν…ŒμŠ€νŠΈ (test/unit directory) 와 functional ν…ŒμŠ€νŠΈ (test/functional directory)둜 λ‚˜λ‰©λ‹ˆλ‹€. κΈ°μ‘΄ ν…ŒμŠ€νŠΈ 쀑 ν•˜λ‚˜λ₯Ό ν…œν”Œλ¦ΏμœΌλ‘œ μ‚¬μš©ν•˜μ—¬ μƒˆ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.

  • Unit ν…ŒμŠ€νŠΈλŠ” LuaJit FFI에 μ˜ν•΄ λ‘œλ“œλ˜κ³  ν˜ΈμΆœλ˜λŠ” 곡유 라이브러리둜 ν…ŒμŠ€νŠΈλ₯Ό μ»΄νŒŒμΌν•˜μ—¬ μˆ˜ν–‰λ©λ‹ˆλ‹€.
  • _Functional_ν…ŒμŠ€νŠΈλŠ” RPC에 μ˜ν•΄ 주도 λ˜λ―€λ‘œ LuaJit (Lua와 λ°˜λŒ€)을 ν•„μš”λ‘œ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Lua의 μ£Όμš”κ°œλ…μ„ key concepts of Lua in 15 minutesμ—μ„œ 배울 수 μžˆμŠ΅λ‹ˆλ‹€.

Running Tests

Building Neovim을 μ°Έμ‘°ν•˜μ‹œμ˜€.

Guidelines for writing tests

  • ν…ŒμŠ€νŠΈμ˜ ꡬ성 및 가독성을 μœ„ν•΄ BDD 지침을 κ³ λ €ν•˜μ‹­μ‹œμ˜€. ν…ŒμŠ€νŠΈμ€‘μΈ λ‚΄μš©(ν•΄λ‹Ήλ˜λŠ” 경우 ν™˜κ²½)을 κΈ°μˆ ν•˜κ³  λ™μž‘μ„ λ‚˜νƒ€λ‚΄λŠ” spec을 μž‘μ„±ν•˜μ‹­μ‹œμ˜€.
  • λͺ¨λ“ˆ μ „μ—­ λ³€μˆ˜μ—μ„œλ§Œ λ³Ό 수 μžˆλŠ” λΆ€μž‘μš©μ΄μžˆλŠ” μ •μ ν•¨μˆ˜λ₯Ό ν…ŒμŠ€νŠΈν•˜λ €λ©΄ μˆ˜μ • 된 λ³€μˆ˜μ— λŒ€ν•œ μ ‘κ·Όμžλ₯Ό λ§Œλ“­λ‹ˆλ‹€ 예λ₯Όλ“€μ–΄, 정적 λ³€μˆ˜λ₯Ό μˆ˜μ •ν•˜λŠ” misc1.c의 ν•¨μˆ˜λ₯Ό ν…ŒμŠ€νŠΈν•˜κ³ ,test / c-helpers / misc1.c νŒŒμΌμ„ λ§Œλ“€κ³ , ν•¨μˆ˜ 호좜 후에 값을 κ²€μƒ‰ν•˜λŠ” ν•¨μˆ˜λ₯Ό μΆ”κ°€ν•œλ‹€κ³  κ°€μ • ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€. test / c-helpers νŒŒμΌμ€ ν…ŒμŠ€νŠΈ 곡유 라이브러리λ₯Ό λΉŒλ“œ ν•  λ•Œλ§Œ 컴파일 λ©λ‹ˆλ‹€.
  • Luajit은 ν•¨μˆ˜ ν”„λ‘œν†  νƒ€μž…μ— μ‚¬μš©λ˜λŠ” μœ ν˜• 및 μƒμˆ˜ 선언에 λŒ€ν•΄ μ•Œμ•„μ•Όν•©λ‹ˆλ‹€. helpers.lua νŒŒμΌμ€ μžλ™μœΌλ‘œ`types.h 'λ₯Ό νŒŒμ‹±ν•˜λ―€λ‘œ ν…ŒμŠ€νŠΈ 된 ν•¨μˆ˜μ—μ„œ μ‚¬μš© 된 μœ ν˜•μ€ λ°˜λ“œμ‹œ μ΄λ™λ˜μ–΄μ•Ό ν•˜λ©° ν…ŒμŠ€νŠΈ 파일의 선언을 λ‹€μ‹œ μž‘μ„±ν•˜μ§€ μ•Šμ•„λ„λ©λ‹ˆλ‹€.
  • 맀크둜 μƒμˆ˜λŠ” μ—΄κ±° ν˜•μœΌλ‘œ μž‘μ„±ν•΄μ•Ό μžλ™μœΌλ‘œ ν…ŒμŠ€νŠΈμ—μ„œ μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • BustedλŠ” λ‹€μ–‘ν•œ "output providers"λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€. The gtest output providerλŠ” ν…ŒμŠ€νŠΈλ₯Ό μ§„λ‹¨ν•˜λŠ” 데 유용 ν•  μˆ˜μžˆλŠ” μžμ„Έν•œ 정보λ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€. Makefile을 μˆ˜μ •ν•˜κ±°λ‚˜make CMAKE_EXTRA_FLAGS = -DBUSTED_OUTPUT_TYPE = gtestλ₯Ό μ‚¬μš©ν•˜μ—¬ μ»΄νŒŒμΌν•˜λ©΄ ν™œμ„±ν™”λ©λ‹ˆλ‹€.
  • Use busted's pending() feature to skip tests (example). if-else둜 ν…ŒμŠ€νŠΈλ₯Ό κ±΄λ„ˆ λ›°μ§€ λ§ˆμ‹­μ‹œμ˜€. κΈ°λŠ₯ ν…ŒμŠ€νŠΈκ°€ μ™ΈλΆ€μš”μΈμ—(e.g. the existence of md5sum on $PATH) μ˜μ‘΄ν•˜λŠ” 경우, μ™ΈλΆ€ μš”μ†Œκ°€ μ—†λ‹€λ©΄ pending ()을 톡해 ν…ŒμŠ€νŠΈλ₯Ό κ±΄λ„ˆ λœλ‹ˆλ‹€. μ΄λ ‡κ²Œν•˜λ©΄ * total * ν…ŒμŠ€νŠΈ 횟수 (성곡 + μ‹€νŒ¨ + 였λ₯˜ + 보λ₯˜ 쀑)κ°€ λͺ¨λ“  ν™˜κ²½μ—μ„œ λ™μΌν•˜κ²Œ μœ μ§€λ©λ‹ˆλ‹€.
  • μΆœν•˜ 된 luacheck ν”„λ‘œκ·Έλž¨ (syntynasticμ—μ„œ 지원을 μ‚¬μš©ν•˜λ €λ©΄`make testlint 'λ₯Ό μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.

ν…ŒμŠ€νŠΈκ°€ μ§„ν–‰λ˜λŠ” κ³³

  • μœ λ‹› tests (test / unit)λŠ” src / nvim /의 ꡬ쑰와 μΌλŒ€μΌλ‘œ μΌμΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. ν•¨μˆ˜λ₯Ό 직접 ν…ŒμŠ€νŠΈν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 예 : src / nvim / undo.c에 λŒ€ν•œ μœ λ‹› ν…ŒμŠ€νŠΈλŠ”test / unit / undo_spec.lua에 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • _ κΈ°λŠ₯ ν…ŒμŠ€νŠΈ _ (ν…ŒμŠ€νŠΈ / κΈ°λŠ₯)λŠ” λ‹¨μœ„ ν…ŒμŠ€νŠΈλ³΄λ‹€ μƒμœ„ 레벨 (ν”ŒλŸ¬κ·ΈμΈ 및 μ‚¬μš©μž μž…λ ₯)μž…λ‹ˆλ‹€. 그듀은 κ°œλ…λ³„λ‘œ 쑰직 λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
    • μƒˆλ‘œμš΄ 'test / functional / * / * _ spec.lua` 그룹을 μ°Ύμ•„λ³΄μ‹­μ‹œμ˜€.

이동 legacy ν…ŒμŠ€νŠΈ 검사 λͺ©λ‘

** μ°Έκ³  : ** "ꡬ식"(src / testdir / *. in) legacy ν…ŒμŠ€νŠΈλ§Œ λ³€ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. "μƒˆλ‘œμš΄ μŠ€νƒ€μΌ"의 Vim ν…ŒμŠ€νŠΈλ₯Ό λ³€ν™˜ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€. (src / testdir / *. vim). "μƒˆλ‘œμš΄ μŠ€νƒ€μΌ"의 Vim ν…ŒμŠ€νŠΈλŠ” 이전 ν…ŒμŠ€νŠΈλ³΄λ‹€ λΉ λ₯΄λ©°, λ³€ν™˜μ€ μ‹œκ°„κ³Ό λ…Έλ ₯을 ν•„μš”λ‘œ ν•©λ‹ˆλ‹€.

  • Makefileμ—μ„œ ν…ŒμŠ€νŠΈλ₯Ό μ œκ±°ν•˜μ‹­μ‹œμ˜€ (src / nvim / testdir / Makefile).
  • κ΄€λ ¨λœ test.in,test.out,test.ok νŒŒμΌμ„ src / nvim / testdir /μ—μ„œ μ œκ±°ν•˜μ‹­μ‹œμ˜€.
  • Lua ν…ŒμŠ€νŠΈκ°€ _spec.luaμ—μ„œ λλ‚˜λŠ” μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.
  • λΉŒλ“œ λ‘œκ·Έμ—μ„œ ν…ŒμŠ€νŠΈ νšŸμˆ˜κ°€ μ¦κ°€ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.
  • μƒˆ ν…ŒμŠ€νŠΈμ— 이전 ν…ŒμŠ€νŠΈμ™€ λ™μΌν•œ μ œμ–΄ 문자 (^], ...)κ°€ ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    • μ‹€μ œ μ œμ–΄ 문자 λŒ€μ‹  λ™λ“±ν•œ ν…μŠ€νŠΈ ν‘œν˜„μ„ μ‚¬μš©ν•˜μ‹­μ‹œμ˜€ (예 :^] λŒ€μ‹ ). scripts / legacy2luatest.pl μŠ€ν¬λ¦½νŠΈλŠ” μ΄λŸ¬ν•œ λ³€ν™˜ 쀑 일뢀λ₯Ό μžλ™μœΌλ‘œ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

팁

  • μ •λ§λ‘œ ``source ([= [...] =])블둝은 ꡬ문 κ°•μ‘°λ₯Ό 깨뜨릴 수 μžˆμŠ΅λ‹ˆλ‹€. : syntax sync from start`λ₯Ό μ‹œλ„ν•΄ μˆ˜μ •ν•˜μ‹­μ‹œμ˜€.
⚠️ **GitHub.com Fallback** ⚠️