μ½λλ₯Ό μ§κ³ λμ μ μλνλ μ½λμΈμ§ ν μ€νΈλ₯Ό μν΄μλ ν μ€νΈ μ½λλ₯Ό μμ±ν νμκ° μμ΅λλ€. λ²κ·Έλ₯Ό λ―Έμ°μ λ°©μ§νκ³ λ²μ κ΄λ¦¬μμ€ν μ PullRequest μ λ€λ₯Έ κ°λ°μλ€μ΄ μΆκ° κΈ°λ₯μ λν΄μ μμ¬λ νλ μν μ ν©λλ€.
μλ λ κ°μ λνλ ν¨μκ° μμ΅λλ€. λ§μ½ μ«μλ§ λν΄μΌ νλ€κ³ ν λ, μ΄λ»κ² ν μ€νΈ μ½λλ₯Ό μμ±νλ μ§ μμλ³΄κ² μ΅λλ€.
# runcode.py
def addNum(a,b):
return a + bν μ€νΈ μ½λλ μλμ²λΌ μμ±ν©λλ€.
# testcode.py
import unittest
from runcode import *
class Test_code(unittest.TestCase):
def test_addNum(self):
self.assertEqual(addNum(1,2), 3) # μμΈ‘κ°μ μ μ΅λλ€.
self.assertEqual(addNum(0.1,2), 2.1)
if __name__ == "__main__":
unittest.main()Test μ½λλ ν°λ―Έλμμ μλμ²λΌ μ€νν©λλ€.
$ python testcode.py
μ΄λ²μλ ν μ€νΈ μ½λμ μ«μλμ λ¬Έμλ₯Ό νλ λ£μ΄λ³΄μ£ .
# testcode.py
import unittest
from runcode import *
class Test_code(unittest.TestCase):
def test_addNum(self):
self.assertEqual(addNum(1,2), 3)
self.assertEqual(addNum(0.1,2), 2.1)
self.assertEqual(addNum("ν
",2), 2)
if __name__ == "__main__":
unittest.main()======================================================================
ERROR: test_addNum (__main__.Test_code)
----------------------------------------------------------------------
Traceback (most recent call last):
File "testcode.py", line 9, in test_addNum
self.assertEqual(addNum("ν
",2), 2)
File "/Users/woong/test/runcode.py", line 7, in addNum
return a+b
TypeError: cannot concatenate 'str' and 'int' objects
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (errors=1)
μλ¬κ° λ°μνμ΅λλ€.
aκ°μ μ«μκ° μ¬μ§, λ¬Έμκ° μ¬μ§, 리μ€νΈκ° μ¬μ§ μ μ μκΈ° λλ¬Έμ΄μ£ . a λλ b κ°μ€ νλμ λ¬Έμκ° λ€μ΄κ°λ©΄ μλμ κ°μ νμ μλ¬κ° λ°μν κ² μ λλ€.
ν μ€νΈ μ½λλ₯Ό μ€ννλ©΄ μμ κ°μ λ©μμ§κ° μΆλ ₯λ©λλ€. λ¬Έμλ₯Ό λ£λκ²μ μμνμ§ λͺ»νκ³ ν¨μλ₯Ό μμ±νκΈ° λλ¬Έμ λλ€. μ΄λ¬ν λ¬Έμ λ νΌμ μμ±νλ μ½λμμλ μμ£Ό μΌμ΄λμ§ μμ΅λλ€. νμ§λ§ μ¬λ¬λΆμ΄ μλ§μ κ°λ°μλ₯Ό μν΄μ λ§λ API λλ λΌμ΄λΈλ¬λ¦¬λ₯Ό μμ±νλ μν©μ΄λΌλ©΄ μ΄μΌκΈ°λ λ¬λΌμ§λλ€. λ€λ₯Έ κ°λ°μκ° ν¨μμ μ€μ λ‘ μ΄λ ν κ°μ΄μ λ£μμ§ λͺ¨λ₯Έλ€κ³ κ°μ νκ³ μμ±ν΄μΌν©λλ€.
μ€λ¬΄μμλ addNum ν¨μ νλλ₯Ό μμ±νλλΌλ λͺ¨λ μλ¬λ μλμ§λ§, μμΈ‘ν μ μλ μλ¬λ₯Ό μκ°νλ©° μμ±ν νμλ μμ΅λλ€. μ΄λ κ² μμ±νλ©΄ κ±°λν μννΈμ¨μ΄κ° μλμ€μ κ°μκΈ° λ°μνλ μλ¬λ₯Ό λ―Έμ°μ λ°©μ§ν μ μμ΅λλ€. νμ΄μ¬μ λ€μ΄λλ―Ή λ κ·μ§ μ λλ€. μ»΄νμΌλ¬κ° μ½λλ₯Ό μΌμΌν 체ν¬νμ§ μλλ€λ μ΄μΌκΈ° μ λλ€. μ½λλ₯Ό μ€νμ ν΄μΌ λΉλ‘μ κ·Έ μ½λμ μλ¬κ° μλμ§ μ μ μλ΅λλ€. κ°λ ₯νκ² νμ μ 체ν¬ν΄μΌνλ μν©μ΄λΌλ©΄ μλκ°μ μ½λλ₯Ό μμ±ν΄μΌ ν νμκ° μμ΅λλ€. μλ μ½λλ νΈμμ λ κ°μ λν μ μλ€λ©΄ μλ¬μ ν¨κ» 0μ λ°ννλλ‘ νμ΅λλ€.
# coding:utf-8
# runcode.py
def addNum(a,b):
"""
addNum ν¨μλ λ μλ₯Ό λνλ ν¨μ μ
λλ€.
"""
if not(isinstance(a,int) or isinstance(a,float)):
return 0, "λ κ°μ λν μ μμ΅λλ€."
if not(isinstance(b,int) or isinstance(b,float)):
return 0, "λ κ°μ λν μ μμ΅λλ€."
return a+b, Noneλ¬Όλ‘ μν©μ λ°λΌμλ μλ μ½λμ²λΌ try, exceptλ₯Ό μ¬μ©ν΄λ μ’μ΅λλ€. νμ§λ§ μ¬λ¬λΆμ΄ μλ²νλ‘κ·Έλ¨μ²λΌ μ ννκ² μ΄λμ μλ¬κ° λ¬λμ§ μκ³ μΆμλλ μμ²λΌ κ° μν©λ³λ‘ μλ¬λ₯Ό 체ν¬νλ κ²μ΄ λ μ’μ μ μμ΄μ. λ§μ½ a, b κ° λλ€ λ¦¬μ€νΈνμΌλ‘ ν¨μμ μΈμλ‘ λ€μ΄μ λ²λ¦¬λ©΄ try/exceptλ‘ κ΅¬νν μ½λλ μ€μλμ νκ²λ ν λκΉμ.
# coding:utf-8
# runcode.py
def addNum(a,b):
"""
addNum ν¨μλ λ μλ₯Ό λνλ ν¨μ μ
λλ€.
"""
try:
return a+b, None
except:
return 0, "λ κ°μ λν μ μμ΅λλ€."μ΄ ν¨μμ λ¬Έμ κ° μλμ§ μλμ§λ₯Ό νλ¨νκΈ° μνμ¬ a λλ b κ°μ int, float νμ μ΄ μλ λ€λ₯Έ typeμ λ£μ΄μ ν μ€νΈν΄ λ΄ μλ€. κ΄λ ¨ ν μ€νΈ μ½λλ μλμ κ°μ ꡬ쑰λ₯Ό λκ² λ©λλ€.
# coding:utf-8
# testcode.py
import unittest
from runcode import *
class Test_code(unittest.TestCase):
def test_addNum(self):
self.assertEqual(addNum(1,2), (3,None))
self.assertEqual(addNum(0.1,2), (2.1,None))
self.assertEqual(addNum("ν
",2), (0,"λ κ°μ λν μ μμ΅λλ€."))
self.assertEqual(addNum("ν
","μ€"), (0,"λ κ°μ λν μ μμ΅λλ€."))
self.assertEqual(addNum([1,2],[1,2]), (0,"λ κ°μ λν μ μμ΅λλ€.")) # 리μ€νΈλ₯Ό λ£μμ΅λλ€.
self.assertEqual(addNum({"a":1},(1)), (0,"λ κ°μ λν μ μμ΅λλ€.")) # λμ
λ리μ ννμ λν΄λ³΄κ² μ΅λλ€.
if __name__ == "__main__":
unittest.main()ν μ€νΈκ° μ μ§νλλ©΄ μλμ κ°μ λ©μμ§λ₯Ό μΆλ ₯ν©λλ€.
$ python testcode.py
.
---------------------------------------------------------------
Ran 1 test in 0.000s
OK
μ΄μμΌλ‘ νμ΄μ¬μμ ν μ€νΈ μ½λλ₯Ό μμ±νλ κ³Όμ μ μμ보μμ΅λλ€.