2014-04-17 1 views
0

unittest의 하위 클래스 및 메서드의 동작을 이해하려고합니다. 다음 코드에서는 test_sub가 아닌 test_add 메서드 만 실행하려고합니다. 출력이 방법이 모두 실행되고 있음을 증명하기 때문에 누군가 내가 뭘 잘못 설명해 주시겠습니까 다음과 같이TextTestRunner는 pyunit에서 두 테스트 (test_methods가 호출 될 때)를 실행합니다.

import unittest 

def add(a,b): 
    x=a+b 
    return x 

def sub(x,y): 
    z=x-y 
    return z 

class addnum(): 
    def calladd(self, a, b): 
     sum1 = add(a, b) 
     return sum1 
    def callsub(self,x,y): 
     diff = sub(x , y) 
     print "subtraction succ" 
     return diff 

class test(addnum, unittest.TestCase): 
    def setup(self): 
     pass 

    def teardown(self): 
     pass 

    def test_add(self): 
     a1=addnum() 
     if a1.calladd(1, 2) ==3: 
      print "add successful" 
     assert addnum().calladd(1,2) == 3 

    def test_sub(self): 
     assert addnum().callsub(5, 3) == 2 
     print "abc" 

#suite = unittest.TestSuite() 
#suite.addTest(test('test_add')) 
runner = unittest.TextTestRunner(verbosity=2) 
runner.run(test(methodName='test_add')) 

출력은 다음과 같습니다

Finding files... done. 
Importing test modules ... add successful 
done. 

add successful 
subtraction succ 
abc 
---------------------------------------------------------------------- 
Ran 2 tests in 0.000s 

OK 
test_add (trial2.test) ... ok 

---------------------------------------------------------------------- 
Ran 1 test in 0.000s 

OK 

이 도와주세요. 나는이 시점에서 내 지식이 상당히 제한적이라는 것을 인정한다.

답변

1

우선, 모듈의 끝에이 행을두면 안됩니다. 그렇지 않으면 모듈을 가져올 때마다이 테스트가 실행됩니다. 이처럼 포장한다 :이 방법으로

if __name__ == "__main__": 
    #suite = unittest.TestSuite() 
    #suite.addTest(test('test_add')) 
    runner = unittest.TextTestRunner(verbosity=2) 
    runner.run(test(methodName='test_add')) 

, 당신의 코드는 평 모듈은 혼자가 아니라 수입이라고하는 경우에만 실행됩니다. 그런 일이 잘 작동하고 요청한 테스트 만 실행합니다.

test_add (__main__.test) ... ok 
add successful 

---------------------------------------------------------------------- 
Ran 1 test in 0.001s 

OK 

시험지를 잊어 버린 경우에도 문제가되지 않도록 항상 포장하십시오.

+0

어떤 파이썬을 사용하고 있습니까? unittest 모듈의 차이점은 2.7 이상입니다. 그것은 우리의 행동이 행동에서 일치하지 않는 이유를 설명 할 수 있습니다. – Diegomanas

+0

TextTestRunner가 사용되는 방식에 많은 차이가 있는지 확인했습니다. – Diegomanas

+0

Eclipse의 PyDev 플러그인이 전체 모듈을 한 번 실행 한 것 같습니다. 따라서 if (main)를 사용하지 않고도 프로그램에서 두 가지 테스트를 실행 한 것입니다. 어쨌든 방향 주셔서 감사합니다. 편의를 위해 넷빈으로 전환했습니다. – Kevin

관련 문제