일련의 자동화 된 테스트에 대해 setUp을 한 번만 실행
내 Python 버전은 2.6입니다.
모든 테스트에 필요한 작업을 수행하기 때문에 테스트 setUp 메서드를 한 번만 실행하고 싶습니다.
내 생각은 첫 번째 실행 후 'true'로 설정되는 부울 변수를 만든 다음 설정 메서드에 대한 둘 이상의 호출을 비활성화하는 것입니다.
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 ---
왜 이것이 작동하지 않습니까? 내가 놓친 것이 있습니까?
setUpClass
테스트 스위트 당 한 번만 실행되는 메소드를 정의 하는 데 사용할 수 있습니다 .
다니엘의 대답은 정확하지만 여기에 같은 호출하지 내가 찾은 몇 가지 일반적인 실수 피하기 위해 예이다 super()
의 setUpClass()
경우 TestCase
의 서브 클래스 unittest.TestCase
(처럼 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()
setUp에 대한 호출을 중복 제거하지 말고 한 번만 호출하십시오.
예를 들면 :
class MyClass(object):
...
def _set_up():
code to do one-time setup
_set_up()
모듈이 처음로드 될 때 _set_up ()을 호출합니다. 모듈 수준 함수로 정의했지만 MyClass의 클래스 메서드로 만들 수도 있습니다.
설정하려는 모든 코드를 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)
또 다른 가능성은에서 인스턴스화하는 Singleton 클래스를 갖는 것입니다.이 클래스 setUp()
는 __new__
코드를 한 번만 실행 하고 나머지 호출에 대해 개체 인스턴스를 반환합니다. 참조 : 싱글 톤을 정의하는 간단하고 우아한 방법이 있습니까?
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)
당신의 방식도 작동합니다.
If you ended up here because of need to load some data for testing... then as far as you are using Django 1.9+ please go for setUpTestData:
class MyTests(TestCase):
@classmethod
def setUpTestData(cls):
# Set up data for the whole TestCase
cls.foo = Foo.objects.create(bar="Test")
def test1(self):
self.assertEqual(self.foo.bar, 'Test')
setup_done is a class variable, not an instance variable.
You are referencing it as an instance variable:
self.setup_done
But you need to reference it as a class variable:
mySelTest.setup_done
Here's the corrected code:
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)
참고URL : https://stackoverflow.com/questions/14305941/run-setup-only-once-for-a-set-of-automated-tests
'Programing' 카테고리의 다른 글
jQuery는 붙여 넣기 이벤트에 바인딩, 붙여 넣기의 내용을 가져 오는 방법 (0) | 2020.11.20 |
---|---|
요소 외부 클릭 감지 (바닐라 자바 스크립트) (0) | 2020.11.20 |
mongodb의 저널 파일을 삭제해도 안전합니까? (0) | 2020.11.20 |
컴파일러 오류가없는 여러 반환 문 (0) | 2020.11.20 |
하나의 파일을 포드에 공유 / 마운트하는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.20 |