2013-12-08 14 views
1

메인 파일 인 calc.py에 대한 테스트를 unittest 모듈 파일 MyTests.py에 쓰고 싶습니다. 여기 모듈 단위 테스트를 작성하는 올바른 방법은 무엇입니까?

내 주요 파이썬 파일, calc.py입니다 :

import myTests 

def first(x): 
    return x**2 

def second(x): 
    return x**3 

def main(): 
    one = first(5) 
    two = second(5) 

if __name__ == "__main__": 
    main() 
    try: 
     myTests.unittest.main() 
    except SystemExit: 
     pass 

그리고 여기 내 MyTests.py 파일입니다

import unittest 
import calc 

class TestSequenceFunctions(unittest.TestCase): 
    def setUp(self): 
     self.testInput = 10 

    def test_first(self): 
     output = calc.first(self.testInput) 
     correct = 100 
     assert(output == correct) 

    def test_second(self): 
     output = calc.second(self.testInput) 
     correct = 1000 
     assert(output == correct) 

난 실행하면 내 calc.py, 나는 다음과 같은 출력 얻을 :

---------------------------------------------------------------------- 
Ran 0 tests in 0.000s 

OK 

왜 unittest가 "Ran 시험 "?
모듈에 unittest를 작성하는 올바른 방법은 무엇입니까?

답변

3

unittests.main()은 현재 모듈에서 TestCase 인스턴스 을 찾습니다. 모듈에는 그러한 테스트 케이스가 없습니다. 그것은 단지 myTests 글로벌입니다.

테스트를 실행하는 것이 가장 좋습니다. myTests.py 파일에 거기 __main__ 섹션을 추가 :

import unittest 
import calc 

class TestSequenceFunctions(unittest.TestCase): 
    def setUp(self): 
     self.testInput = 10 

    def test_first(self): 
     output = calc.first(self.testInput) 
     correct = 100 
     assert(output == correct) 

    def test_second(self): 
     output = calc.second(self.testInput) 
     correct = 1000 
     assert(output == correct) 

if __name__ == '__main__': 
    unittest.main() 

대신 python myTests.py를 실행합니다.

또는 myTests 모듈을 unittest.main()에 전달하십시오. 순환 가져 오기가 있으므로 import myTests으로 __main__으로 옮길 수도 있습니다. 귀하의 사례에서 괜찮 으면 myTests은 테스트 케이스 외부에 calc의 모든 전역을 사용하지 않지만 이에 대해 명시하는 것이 좋습니다.

if __name__ == "__main__": 
    main() 
    try: 
     import myTests 
     myTests.unittest.main(myTests) 
    except SystemExit: 
     pass 
관련 문제