E D R , A S I H C RSS

Mock Objects

UnitTestλΌ μœ„ν•œ μΌμ’…μ˜ 보쑰객체.

What ?

μ‹€μ œμ˜ 객체역할을 ν‰λ‚΄λ‚΄λŠ” 일을 ν•˜λŠ” 객체이닀. 보톡 MockObjectλΌλŠ” ν΄λž˜μŠ€λΌ μƒμ†λ°›μ•„μ„œ (κ΅¬ν˜„μ€ 각 μ–Έμ–΄λ³„λ‘œ 'μ•Œμ•„μ„œ'이닀. ^^; 처음 Mock 의 κ°œλ…μ΄ λ‚˜μ˜¨ μ»¬λŸΌμ€ Java μ†ŒμŠ€μ˜€λ‹€.) λ§Œλ“€μ–΄μ€λ‹€. ν…ŒμŠ€νŠΈλΌ μœ„ν•΄μ„œλŠ” μ²˜μŒμ— ν•΄λ‹Ή 객체에 초기μ„정을 ν•΄ λ‘”λ‹€. 그리고 TestλΌ λŒλ¦¬κ²Œ λœλ‹€.

말둜 ν•˜λ©΄ μ€ μ–΄λ ΅κ³ . --; μ˜ˆλΌ λ“€μ–΄μ„œ μ„λͺ…ν•˜λŠ”κ²Œ μ€ λ” μ΄ν•΄ν•˜κΈ° 쉽겠닀.

μ‚¬μš© 예1) μ—¬λŸ¬ μ‚¬λžŒμ΄ ν”„λ‘œκ·Έλž˜λ° ν• λ•Œ, λ…λ¦½λœ ν”„λ‘œκ·Έλž¨μ΄ μ•„λ‹Œ λͺ¨λ“ˆλ³„λ‘œ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€κ³  μžˆλŠ” 경우. μ΄λŸ΄λ•Œ ν•΄λ‹Ή λͺ¨λ“ˆμ„ μž‘μ„±ν•˜κ³  ν…ŒμŠ€νŠΈ μ½”λ“œλΌ λ§Œλ“€λ €κ³  해도, λ‹€λ₯Έ λͺ¨λ“ˆμ˜ μ˜μ‘΄μ„± λ•Œλ¬Έμ— 진행이 μ–΄λ ΅κ²Œ λœλ‹€. 아직 μ™„μ„±λ˜μ§€ μ•Šμ€ μ˜μ‘΄μ„±μ„ 가진 λͺ¨λ“ˆμ„ MockObject둜 λ§Œλ“¬μœΌλ‘œμ„œ ν•΄λ‹Ή λͺ¨λ“ˆμ„ λ§Œλ“œλŠ” λ™μ•ˆμ˜ μ˜μ‘΄μ„±λ¬Έμ œλΌ ν•΄κ²°ν•  수 μžˆλ‹€.
μΈν„°νŽ˜μ΄μŠ€κ°€ ν™•μ‹€ν•˜κ²Œ 정해지지 μ•Šμ€ λͺ¨λ“ˆμ— λŒ€ν•΄μ„œλŠ” μ–΄λ–»κ²Œ ν•  것인가?

-> MockObjects μžμ²΄κ°€ μΈν„°νŽ˜μ΄μŠ€μ •μ˜λΌ μœ„ν•œ λ„κ΅¬λ‘œ μ΄μš©ν•  수 μžˆλ‹€. (TestFirstProgramming μ—μ„œλŠ” Test Codeκ°€ μΌμ’…μ˜ μΈν„°νŽ˜μ΄μŠ€λΌ μ •μ˜ν•˜κΈ° μœ„ν•œ λ°©λ²•μœΌλ‘œ μ΄μš©λœλ‹€.)

μ‚¬μš© 예2) Datatbase 와 κ΄€λ ¨λœ ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•΄μ„œ UnitTestλΌ ν• λ•Œ, DB Connection 에 λŒ€ν•œ MockObjectλΌ λ§Œλ“€μ–΄μ„œ DB Connection을 μ΄μš©ν•˜λŠ” 객체에 DB Connection 객체 λŒ€μ‹  λ„£μ–΄μ€ŒμœΌλ‘œμ„œ ν•΄λ‹Ή μž‘μ—…μ„ ν•˜κ²Œλ” ν•  수 μžˆλ‹€. 그리고 ν•΄λ‹Ή ν•¨μˆ˜ 뢀뢄이 μ œλŒ€λ‘œ 호좜되고 μžˆλŠ”μ§€λΌ μ•ŒκΈ° μœ„ν•΄ MockObjectμ•ˆμ— Test μ½”λ“œλΌ λ„£μ–΄ μ„ μˆ˜λ„ μžˆλ‹€.

문제점

MockObject λŠ” μ–΄λ””κΉŒμ§€λ‚˜ κ°€μ§œκ°μ²΄μ΄λ‹€. μ‹€μ œ ν…ŒμŠ€νŠΈλΌ ν• λ•Œμ—λŠ” MockObjectλΌ μ΄μš©ν•œ κ²½μš°μ™€ μ‹€μ œμ˜ κ°μ²΄λΌ μ΄μš©ν–ˆμ„λ•Œμ˜ 경우 λ‘˜ λ‹€ κ³ λ €ν•΄μ•Ό ν•œλ‹€.

그리고 μœ„μ™€ 같은 경우 UnitTest μ½”λ“œμ˜ 쀑볡을 κ°€μ Έμ˜¬ μˆ˜λ„ μžˆλ‹€. μ΄λŠ” 상속과 μ˜€λ²„λΌμ΄λ”©μ„ 이용, ν•΄κ²°ν•œλ‹€.

μ–΄λ–»κ²Œ κ΅¬ν˜„ν•˜κ³  μ‚¬μš©ν• κΉŒ ?

본래 MockObjects κ΄€λ ¨ 글은 Java μ†ŒμŠ€μ΄μ§€λ§Œ 각 언어에 따라 λ‚˜λ¦„λŒ€λ‘œ κ΅¬ν˜„ν•  방법이 μžˆκ² λ‹€.
μœ„μ˜ framework μ—μ„œλŠ” λŒ€κ°• 이렇닀.
Class Name μ—­ν• 
MockObject Mock Objectλ“€μ˜ μƒμœ„ν΄λž˜μŠ€. Mock Object듀은 MockObject 듀을 μƒμ†λ°›μ•„μ„œ κ΅¬ν˜„ν•œλ‹€.
Expectation μ†Œμœ„ λ§ν•˜λŠ” 'κΈ°λŒ€κ°’' 을 μœ„ν•΄ λΈλ¦¬ Mock Object에 μ˜ˆμ •λœ 값듀을 μ±„μ›Œλ„£κΈ° μœ„ν•œ ν΄λž˜μŠ€λ“€. MockObjectλŠ” μžμ‹ μ˜ κ΅¬ν˜„μ„ μœ„ν•œ μžλ£Œκ΅¬μ‘°μ²΄λ‘œμ„œ Expectation ν΄λž˜μŠ€λ“€μ„ μ΄μš©ν•  수 μžˆλ‹€.
ExpectationCounter ν•΄λ‹Ή ν•¨μˆ˜μ˜ κΈ°λŒ€ν•˜λŠ” ν˜ΈμΆœνšŸμˆ˜λΌ μΉ΄μš΄νŠΈ ν•˜κΈ° μœ„ν•œ 도움 클래슀
ExpectationList List 도움 클래슀
ExpectationSet 집합 도움 클래슀. λ‚΄λΆ€μ μœΌλ‘œλŠ” DictionaryλΌ μ΄μš©, flag check
ExpectationMap Key : Value. Map 도움 클래슀

  • μ΄μš©λ°©λ²• - MockObjects λΌ μ°Έμ‘°.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:47
Processing time 0.0245 sec