unittest.TestCase의 경우 __init__


122

unittest.TestCase클래스가 초기화 될 때 수행하는 작업에 몇 가지를 추가하고 싶지만 수행 방법을 알 수 없습니다.

지금 나는 이것을하고있다 :

#filename test.py

class TestingClass(unittest.TestCase):

    def __init__(self):
        self.gen_stubs()

    def gen_stubs(self):
        # Create a couple of tempfiles/dirs etc etc.
        self.tempdir = tempfile.mkdtemp()
        # more stuff here

이 전체 테스트 세트에 대해 모든 스텁이 한 번만 생성되기를 바랍니다. 나는 setUpClass()파이썬 2.4에서 작업하고 있기 때문에 사용할 수 없습니다 (파이썬 2.7에서도 작동하지 못했습니다).

내가 여기서 뭘 잘못하고 있니?

이 오류가 발생합니다.

 `TypeError: __init__() takes 1 argument (2 given)` 

... 그리고 __init__명령으로 실행할 때 모든 스텁 코드를 이동할 때 다른 오류가 발생 합니다 python -m unittest -v test.


@Neeraj 내 질문이 그보다 앞서 있다고 생각합니까?

@Abhijeet이 질문은 2013 년에 요청되었으며, 링크 한 질문은 2016 년에 요청되었으며 답변과 담론이 적습니다. 대신 다른 질문을 중복으로 표시해야할까요? 대답은 파이썬 관련 3 파이썬 2에 대한이 질문에 회담이
ffledgling

죄송합니다.
Abhijeet

답변:


166

이 시도:

class TestingClass(unittest.TestCase):

    def __init__(self, *args, **kwargs):
        super(TestingClass, self).__init__(*args, **kwargs)
        self.gen_stubs()

당신은 재정의 TestCase의를 __init__당신을 위해 기본 클래스의 핸들을 인수를하게 할 수 있습니다, 그래서.


+1 개체 메서드를 호출하기 전에 기본 클래스를 초기화합니다.
Joachim Isaksson 2013 년

이것은 나를 위해 작동하지 않습니다. gen_stub 내부의 항목이 실행되지 않습니다. Infact는 gen_stub이 전혀 호출되지 않는 것 같습니다 ... 존재해야하는 self.tempdir은 클래스의 다른 메소드에서 액세스 할 수 없기 때문에 알 수 있습니다. 내가 AttributeError를 얻을 : 'TestingClass'개체가 어떤 속성 'TEMPDIR'가 없다
ffledgling

22
setUp재정의보다는 이것을 호출해서는 안 __init__됩니까?
karthikr

2
@karthikr 매번 모든 테스트에 대해 스텁을 다시 생성하는 대신 모든 테스트에 대해 스텁을 한 번 생성하고 싶습니다. 일부 스텁은 일부 테스트에서도 사용되지 않습니다. 나는 setUpClass를 사용할 것이지만 파이썬 2.4가 그것을 지원한다고 생각하지 않습니다.
ffledgling

2
당신은 또한이 경우에 좀 더 명확하게 할 수 있고 (제 생각에 가독성을 unittest.TestCase.__init__(self,*args,**kwargs)super(TestingClass, self).__init__(*args, **kwargs)
높이는

22

init 함수를 재정의하는 것에 대한 설명을 추가하고 싶었습니다.

unittest.TestCase

이 함수는 테스트 클래스의 각 메서드 전에 호출됩니다. 당신이 수행해야 비싼 계산을 추가하려면 것을 바랍니다 참고 한 번에 모든 시험 방법을 실행하기 전에를 사용하십시오 SetUpClass의 classmethod를

@classmethod
def setUpClass(cls):
    cls.attribute1 = some_expensive_computation()

이 함수는 클래스의 모든 테스트 메서드 전에 한 번 호출됩니다 . setUp각 테스트 메서드 전에 호출되는 메서드를 참조하십시오 .


4

unittest2를 설치하고 해당 패키지의 unittest를 사용합니다.

import unittest2 

그런 다음 특별한 초기화 논리를 위해 setupModule / tearDownModule 또는 setupClass / tearDown 클래스를 사용하십시오.

더 많은 정보 : http://www.voidspace.org.uk/python/articles/unittest2.shtml

또한 단위 테스트보다 통합 테스트를 더 많이 만들고있을 가능성이 높습니다. 테스트를 구별하거나 다른 컨테이너 모듈에 넣으려면 좋은 이름을 선택하십시오.


문서 링크에 감사드립니다.
Chris
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.