[PYTHON] 자동 테스트 세트에 대해 setUp을 한 번만 실행하십시오.
PYTHON자동 테스트 세트에 대해 setUp을 한 번만 실행하십시오.
내 Python 버전은 2.6입니다.
모든 테스트에 필요한 것들을 수행하기 때문에 테스트 setUp 메소드를 한 번만 실행하고 싶습니다.
내 생각은 첫 번째 실행 후 'true'로 설정된 부울 변수를 만든 다음 setup 메서드를 두 번 이상 호출하지 않도록 설정하는 것이 었습니다.
class mySelTest(unittest.TestCase):
setup_done = False
def setUp(self):
print str(self.setup_done)
if self.setup_done:
return
self.setup_done = True
print str(self.setup_done)
출력 :
False
True
--- Test 1 ---
False
True
--- Test 2 ---
왜 이것이 작동하지 않는 걸까요? 내가 놓친 게 있니?
해결법
-
==============================
1.setUpClass를 사용하여 테스트 슈트 당 한 번만 실행되는 메소드를 정의 할 수 있습니다.
setUpClass를 사용하여 테스트 슈트 당 한 번만 실행되는 메소드를 정의 할 수 있습니다.
-
==============================
2.Daniel의 대답은 정확 합니다만, TestCase가 unittest.TestCase의 하위 클래스 인 경우 setUpClass ()에서 super ()를 호출하지 않는 등의 일반적인 실수 (예 : django.test 또는 falcon.testing)를 피할 수 있습니다.
Daniel의 대답은 정확 합니다만, TestCase가 unittest.TestCase의 하위 클래스 인 경우 setUpClass ()에서 super ()를 호출하지 않는 등의 일반적인 실수 (예 : django.test 또는 falcon.testing)를 피할 수 있습니다.
setUpClass ()에 대한 문서에는 그런 경우 super ()를 호출해야한다는 언급이 없습니다. 이 관련 질문에서 볼 수 있듯이, 그렇지 않으면 오류가 발생합니다.
class SomeTest(TestCase): def setUp(self): self.user1 = UserProfile.objects.create_user(resource=SomeTest.the_resource) @classmethod def setUpClass(cls): """ get_some_resource() is slow, to avoid calling it for each test use setUpClass() and store the result as class variable """ super(SomeTest, cls).setUpClass() cls.the_resource = get_some_resource()
-
==============================
3.setUp에 대한 호출을 중복 제거하지 말고 한 번만 호출하십시오.
setUp에 대한 호출을 중복 제거하지 말고 한 번만 호출하십시오.
예 :
class MyClass(object): ... def _set_up(): code to do one-time setup _set_up()
이것은 모듈이 처음로드 될 때 _set_up ()을 호출합니다. 모듈 수준의 함수로 정의했지만, 똑같이 MyClass의 클래스 메서드로 만들 수 있습니다.
-
==============================
4.mySelTest 외부에서 한 번 설정하려는 모든 코드를 배치하십시오.
mySelTest 외부에서 한 번 설정하려는 모든 코드를 배치하십시오.
setup_done = False class mySelTest(unittest.TestCase): def setUp(self): print str(setup_done) if setup_done: return setup_done = True print str(setup_done)
또 다른 가능성은 SetUp ()에서 인스턴스화하는 Singleton 클래스를 갖는 것입니다.이 클래스는 __new__ 코드를 한 번만 실행하고 나머지 호출에서는 객체 인스턴스를 반환합니다. See : 싱글 톤을 정의하는 간단하고 우아한 방법이 있습니까?
class Singleton(object): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super(Singleton, cls).__new__( cls, *args, **kwargs) # PUT YOUR SETUP ONCE CODE HERE! cls.setUpBool = True return cls._instance class mySelTest(unittest.TestCase): def setUp(self): # The first call initializes singleton, ever additional call returns the instantiated reference. print(Singleton().setUpBool)
너의 방법은 너무 일한다.
-
==============================
5.setup_done은 인스턴스 변수가 아닌 클래스 변수입니다.
setup_done은 인스턴스 변수가 아닌 클래스 변수입니다.
인스턴스 변수로 참조하고 있습니다 :
self.setup_done
하지만 클래스 변수로 참조해야합니다.
mySelTest.setup_done
다음은 수정 된 코드입니다.
class mySelTest(unittest.TestCase): setup_done = False def setUp(self): print str(mySelTest.setup_done) if mySelTest.setup_done: return mySelTest.setup_done = True print str(mySelTest.setup_done)
from https://stackoverflow.com/questions/14305941/run-setup-only-once-for-a-set-of-automated-tests by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 두 구분자 사이의 단어를 삭제하는 방법? (0) | 2018.11.04 |
---|---|
[PYTHON] 파이썬에서 함수를 중첩 할 때 오버 헤드가 있습니까? (0) | 2018.11.04 |
[PYTHON] request.user SimpleLazyObject를 반환합니다, 어떻게 ""나요? (0) | 2018.11.04 |
[PYTHON] 함수의 모든 인수를 다른 함수에 전달 (0) | 2018.11.04 |
[PYTHON] 팬더 데이터 프레임에 상수 값이있는 열 추가 (0) | 2018.11.04 |