2012-05-29 2 views
0

Deo 파이썬 지원 setUp() 및 tearDown()은 컨텍스트에 따라 다르게 작동합니까? 나는 이런 식으로 뭔가를 할 수 있다면 꼭, 나는에 대한 질문입니다 :python - unitest setUp 다른 컨텍스트의 tearDown

setUp() { 
    if(context1){ 
     do A; 
    } 
    else{ 
     do B; 
    } 
} 


tearDown() { 
    if(context1){ 
     do A; 
    } 
    else{ 
     do B; 
    } 
} 
+2

* Python * 코드를 게시하면 답변이 더 많을 수 있습니다. – PointedEars

+0

당신은 글로벌 변수 또는 각 테스트 전에 한 번 호출되는'setUpClass()'에 설정된 클래스 변수와 같은 컨텍스트를 가지고 그렇게 할 수 있습니다. 비품의 핵심은 문맥을 제공하는 것이다. 필요하다면 두 가지 검사가 필요할 것입니다. –

답변

1

네가 보여 주듯이, 블록을 사용하고 조건이 참이면 설정의 특정 부분 만 수행하십시오.

다른 테스트에서는 setUptearDown의 다른 버전을 사용하는 것으로 생각합니다. 이

뭔가를 할 -

  • 전혀 적절한 setUp/tearDown 방법
  • 또는 setUp를 사용하지 않고 tearDown 서로 다른 TestCase의 서브 클래스로 테스트를 분할 : 나는 당신이 그 중 하나 사실을 건의 할 것
    class MyTestCase: 
        def _setup_for_foo_tests(): 
         # blah blah blah 
        def _setup_for_bar_tests(): 
         # blah blah blah 
        def test_foo_1(): 
         self._setup_for_foo_tests() 
         # test code 
        def test_foo_2(): 
         self._setup_for_foo_tests() 
         # test code 
        def test_bar_1(): 
         self._setup_for_bar_tests() 
         # test code 
        # etc etc etc 
    
+0

tearDown은 무엇입니까? 설치 프로그램에서 여러 개의 테스트 파일을 만들었다 고 가정하면 _teardown_for_foo_tests도 작성해야합니까? @ AdamKG – Shengjie

+0

그래, 맞아. 이 기술로 들어가는 훌륭한 대화가 있습니다. (http://pyvideo.org/video/634/speedily-practical-large-scale-tests) - 기본 목표는 명시 적으로 setup/teardown 코드를 테스트라고 부르는 것입니다. 주어진 테스트를 위해 불필요한 (그리고 잠재적으로 시간 소모적 인) 코드가 있는지를 알기가 어려울 수 있기 때문에 setUp/tearDown이 암시 적으로 호출 될 것을 기대하는 대신에 의존합니다. – AdamKG

2
당신은 당신이 필요로하는 시험의 각 컨텍스트에 대한 테스트 (일부 공통 조상으로 아마) 2 개 개의 다른 클래스를하는 것에 대해 생각해야

, 그것은 더 쉬울 것입니다. 이 같은

뭔가 :

class BaseTest(): 
    def test_01a(self): 
     pass 

class Context1TestCase(BaseTest, unittest.TestCase): 
    def setUp(self): 
     # do what you need for context1 

    def tearDown(self): 
     # do what you need for context1 

class Context2TestCase(BaseTest, unittest.TestCase): 
    def setUp(self): 
     # do what you need for context2 

    def tearDown(self): 
     # do what you need for context2 

이런 식으로, test_01a 한 번 context2에 한 번 context1에서 실행됩니다.

관련 문제