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.