나의 제안은 파이썬은 단위 테스트를 위해 제공하는 두 개의 프레임 워크 중 하나를 사용하여 코드를 리팩토링하는 것입니다 유닛 테스트 (일명 PyUnit) 및 doctest가.
이 사용 예이다 유닛 테스트 :
import unittest
def adder(a, b):
"Return the sum of two numbers as int"
return int(a) + int(b)
class TestAdder(unittest.TestCase):
"Testing adder() with two int"
def test_adder_int(self):
self.assertEqual(adder(2,3), 5)
"Testing adder() with two float"
def test_adder_float(self):
self.assertEqual(adder(2.0, 3.0), 5)
"Testing adder() with two str - lucky case"
def test_adder_str_lucky(self):
self.assertEqual(adder('4', '1'), 5)
"Testing adder() with two str"
def test_adder_str(self):
self.assertRaises(ValueError, adder, 'x', 'y')
if __name__ == '__main__':
unittest.main()
그리고이 사용 예 doctest가이다 I 입력을 사용하는 또 다른 예를 제조 doctest가 함께
# adder.py
def main(a, b):
"""This program calculate the sum of two numbers.
It prints an int (see %d in print())
>>> main(2, 3)
The sum is 5
>>> main(3, 2)
The sum is 5
>>> main(2.0, 3)
The sum is 5
>>> main(2.0, 3.0)
The sum is 5
>>> main('2', '3')
Traceback (most recent call last):
...
TypeError: %d format: a number is required, not str
"""
c = a + b
print("The sum is %d" % c)
def _test():
import doctest, adder
return doctest.testmod(adder)
if __name__ == '__main__':
_test()
() (파이썬 3을 사용하고 있다고 가정합니다.X) :
# adder_ugly.py
def main():
"""This program calculate the sum of two numbers.
It prints an int (see %d in print())
>>> main()
The sum is 5
"""
a = int(input("Enter an integer: "))
b = int(input("Enter another integer: "))
c = a+b
print("The sum is %d" % c)
def _test():
import doctest, adder_ugly
return doctest.testmod(adder_ugly)
if __name__ == '__main__':
_test()
나는 위의
-v
옵션을 예로 언급 된 각 실행됩니다
: 당신의 참고를 참조하십시오
python adder_ugly.py -v
:
http://docs.python.org/py3k/library/unittest.html?highlight=unittest#unittest
및
을 http://docs.python.org/py3k/library/doctest.html#module-doctest
두 개의 입력 행에 오른쪽 괄호가 없습니다. – Javier
@Javier : 수정 됨. 고마워, 누군가 내 질문을 편집하고'eval (''을 추가했지만 상대방을 닫지는 않았다.) – Jason