2013-05-03 2 views
6

테스트 전에 실행 순서를 설정해야합니다. 다른 것들보다 먼저 검증 된 데이터가 필요합니다. 주문을 할 수 있습니까?Python unittest의 실행 순서

class OneTestCase(unittest.TestCase): 
    def setUp(self): 
     # something to do 
    def test_login (self): 
     # first test 
     pass 
    def test_other (self): 
     # any order after test_login 
    def test_othermore (self): 
     # any order after test_login 
if __name__ == '__main__': 
    unittest.main() 

감사

+3

단위 테스트는 테스트가 단일 단위임을 의미합니다. 그들은 서로에 의존하지 않아야합니다. – njzk2

+0

당신이 맞다, 그러나, 내가 이런 종류의 행동을 할 필요가있을 때 시험을하는 가장 좋은 방법이 될 수 있고, 시험을하기 위해 매번 로그인 할 때 더 좋을 수도있다. 그것은 다른 일을하기 전에 로그인을 시작해야하는 서버를위한 것이고, 다른 방법은 로그인을 기반으로 정보를 읽는 것입니다. – Carlos

+3

실제로 실제 서버와 상호 작용할 경우 * 단위 테스트를 수행하지 않습니다. – delnan

답변

1

더 나은 그것을하지 않습니다.

테스트는 독립적이어야합니다.

테스트를 통해 호출되는 함수에 코드를 넣는 것이 가장 좋을 것입니다. 그와 마찬가지로

:

def assert_can_log_in(self): 
    ... 

def test_1(self): 
    self.assert_can_log_in() 
    ... 

def test_2(self): 
    self.assert_can_log_in() 
    ... 

심지어는 테스트 클래스를 분할하고 설정 기능으로 주장을 넣어.

class LoggedInTests(unittest.TestCase): 
    def setUp(self): 
     # test for login or not - your decision 

    def test_1(self): 
     ... 

테스트를 분할하고 테스트해야하는 모든 사례를 통해 잘 볼 수 있기 때문에 클래스를 분리 할 때 종종 더 나은 테스트를 작성합니다.

+0

로그인도 테스트해야합니다. – Carlos

+0

죄송합니다, 이해가 안됩니다. – User

+3

테스트를 올바르게 작성하는 방법에 대한 오랜 토론을 읽습니다. 사실 일부 테스트는 특정 상태에 따라 달라집니다. 그 상태의 생성을 테스트하는 (예를 들어, 로그인하는) 이전의 테스트를 통해 생성 될 수있다. 이 상태를 만드는 것은 시간이 많이 소요되는 절차 일 수 있으므로 테스트의 기간을 짧게 유지하려면 테스트를 다시 사용하고 체인 테스트를 수행하는 것이 좋습니다. 그렇지 않으면 로그인 한 상태에서 수행하는 테스트를 다루기 위해 로깅 절차를 100 번 테스트하게됩니다. 따라서 테스트 분리에 대해 너무 철학적 인 것은 의미가 없습니다. – Michael

18

당신은 이런 식으로 작업을 수행 할 수 있습니다

class OneTestCase(unittest.TestCase): 
    @classmethod 
    def setUpClass(cls): 
     # something to do 
     pass 

    def test_01_login (self): 
     # first test 
     pass 
    def test_02_other (self): 
     # any order after test_login 
    def test_03_othermore (self): 
     # any order after test_login 

if __name__ == '__main__': 
    unittest.main(failfast=True, exit=False) 

테스트가 알파벳 순으로 정렬됩니다, 그래서 그냥 원하는 순서를 얻기 위해 번호를 추가 할 수 있습니다. 아마도 테스트 러너에 failfast = True을 설정하려고하므로 첫 번째 테스트가 실패하면 바로 실패합니다.

+3

그들은 어디에서 분류됩니까? 하나는 그것에 의지 할 수 있습니까? – User

+2

unittest는 알파벳 순으로 정렬합니다. – Michael

+0

@ 사용자 Python docs : "다양한 테스트 케이스가 실행되는 순서는 문자열의 기본 제공 순서에 따라 테스트 함수 이름을 정렬하여 결정됩니다." – mloskot