2010-08-09 7 views
7

python으로 테스트 클래스 내에서 테스트 메소드를 호출 할 수 있습니까? 예 :python unittest 메소드

 

class Test(unittest.TestCase): 
    def setUp(self): 
     #do stuff 

    def test1(self): 
     self.test2() 

    def test2(self): 
     #do stuff 
 

업데이트 : 내 질문의 나머지 절반을 잊어 버렸습니다. 테스터가 호출하는 방법 후에 만 ​​설정 또는 해체가 호출됩니까? 아니면 test1에서 test2를 호출 한 후 test1이 호출 될 때 호출 될 것인가?

+1

예 ... 궁금한 점이 많습니다. 아마도 정교 할 수 있을까요? – Seth

답변

6

다음 코드를 실행 해보십시오 :

import unittest 

class Test(unittest.TestCase): 
    def setUp(self): 
     print 'Setting Up' 

    def test1(self): 
     print 'In test1' 
     self.test2() 

    def test2(self): 
     print 'In test2' 

    def tearDown(self): 
     print 'Tearing Down' 

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

을 그리고 그 결과는 다음과 같습니다 유닛 테스트에 의해

이제
Setting Up 
In test1 
In test2 
Tearing Down 
.Setting Up 
In test2 
Tearing Down 
. 
---------------------------------------------------------------------- 
Ran 2 tests in 0.000s 

OK 

당신이 볼 시험 방법은 라고하기 전에, setUp이 전화를받을 및 tearDown입니다 통화 후 호출됩니다.

+0

내가 수행해야하는 작업을 선택했습니다. – Falmarri

1

문자열 이름이 'test'으로 시작하는 모든 메소드는 단위 테스트로 간주됩니다 (즉, unittest.main()을 호출하면 실행됩니다). 따라서 Test 클래스 내에서 메소드를 호출 할 수 있지만 단위 테스트로도 실행하지 않으려면 문자열 'test'으로 시작하지 않는 이름을 지정해야합니다.

0

확실한 이유는 무엇입니까? 그렇다고해서 test2가 두 번 호출된다는 것을 의미합니다. 즉 test1에 의해 한 번, 다시 한번 자체 테스트로 호출됩니다. test라는 모든 함수가 호출되기 때문입니다. 모두

+0

대답은 "기술적으로는 그렇습니다. **하지만 **는 아닙니다."라고 생각합니다. 또한 위임이 아닌 테스트 케이스에서 상속을 원한다고 생각합니다. –

+0

이 작업을 수행하면 테스트 클래스가 테스트 실행 횟수를 초과하거나 이상한 이상한 결과를 초래할 수 있다고 궁금합니다. – Falmarri

0

예 :

  • setUp하는 것은 각각의 테스트
  • test2 사이에 호출됩니다 두 번 호출됩니다.

테스트 중에 함수를 호출하려면 test 접두어를 생략하십시오.

8

이것은 꽤 많이 Do Not Do That입니다. 특정 순서로 테스트를 실행하려면 runTest 메서드를 정의하고 메서드 이름을 test...으로 지정하지 마십시오.

class Test_Some_Condition(unittest.TestCase): 
def setUp(self): 
    ... 
def runTest(self): 
    step1() 
    step2() 
    step3() 
def tearDown(self): 
    ... 

하나 (1)의 설정과 하나 (1)의 tearDown와 순서의 단계를 실행합니다. 신비가 없다.

관련 문제