여러 테스트에 대한 Unit test setUp/tearDown
테스트 시나리오의 시작/종료 시 실행되는 기능이 있습니까?setUp 및 tearDown 기능은 모든 테스트 전후에 실행됩니다.
저는 일반적으로 이것을 갖고 싶습니다.
class TestSequenceFunctions(unittest.TestCase):
def setUpScenario(self):
start() #launched at the beginning, once
def test_choice(self):
element = random.choice(self.seq)
self.assertTrue(element in self.seq)
def test_sample(self):
with self.assertRaises(ValueError):
random.sample(self.seq, 20)
for element in random.sample(self.seq, 5):
self.assertTrue(element in self.seq)
def tearDownScenario(self):
end() #launched at the end, once
현재 setUp 및 tearDown은 단위 테스트이며 모든 시나리오(많은 테스트 포함)에서 확산됩니다. 하나는 첫 번째 테스트이고 다른 하나는 마지막 테스트입니다.
2.7(문서에 따라) 기준으로 다음과 같은 이점이 있습니다.setUpClass
그리고.tearDownClass
지정된 클래스의 테스트가 실행되기 전과 후에 각각 실행됩니다.또는 하나의 파일에 그룹이 있는 경우 다음을 사용할 수 있습니다.setUpModule
그리고.tearDownModule
(해석).
그렇지 않으면 파생된 Test Suite를 직접 생성하여 오버라이드하는 것이 최선의 방법일 것입니다.run()
다른 모든 통화는 부모님이 처리하고 실행하면 부모님의 통화를 중심으로 설정 및 해체 코드를 호출합니다.run
방법.
저도 같은 시나리오를 가지고 있습니다. 저는 setUpClass와 tearDownClass 메소드가 완벽하게 작동합니다.
import unittest
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls._connection = createExpensiveConnectionObject()
@classmethod
def tearDownClass(cls):
cls._connection.destroy()
다음은 예입니다. 3가지 테스트 방법이 공유 리소스에 액세스합니다. 공유 리소스는 테스트별로 생성되지 않고 한 번 생성됩니다.
import unittest
import random
class TestSimulateLogistics(unittest.TestCase):
shared_resource = None
@classmethod
def setUpClass(cls):
cls.shared_resource = random.randint(1, 100)
@classmethod
def tearDownClass(cls):
cls.shared_resource = None
def test_1(self):
print('test 1:', self.shared_resource)
def test_2(self):
print('test 2:', self.shared_resource)
def test_3(self):
print('test 3:', self.shared_resource)
python 2.5의 경우, 그리고 pydev로 작업할 때, 그것은 약간 어렵습니다.Pydev는 테스트 스위트를 사용하지 않고 모든 개별 테스트 케이스를 찾아 개별적으로 실행하는 것으로 보입니다.
이에 대한 제 솔루션은 다음과 같은 클래스 변수를 사용하는 것이었습니다.
class TestCase(unittest.TestCase):
runCount = 0
def setUpClass(self):
pass # overridden in actual testcases
def run(self, result=None):
if type(self).runCount == 0:
self.setUpClass()
super(TestCase, self).run(result)
type(self).runCount += 1
이 속임수로, 당신이 이것으로부터 상속받을 때.TestCase
(원작에서 제외)unittest.TestCase
), 당신은 또한 상속받을 것입니다.runCount
0. 그렇다면 실행 방법에서,runCount
어린이 테스트 사례를 확인하고 증가시킵니다.이것은 다음을 남깁니다.runCount
0에서 이 클래스에 대한 변수입니다.
이것은 다음을 의미합니다.setUpClass
클래스당 한 번만 실행되고 인스턴스당 한 번만 실행되지 않습니다.
나는 없습니다.tearDownClass
아직 방법은 없지만, 그 카운터를 사용하면 뭔가가 만들어질 수 있을 것 같습니다.
import unittest
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.shared_data = "dddd"
@classmethod
def tearDownClass(cls):
cls.shared_data.destroy()
def test_one(self):
print("Test one")
def test_two(self):
print("Test 2")
자세한 내용은 Python 유닛 테스트 문서를 참조하십시오.
언급URL : https://stackoverflow.com/questions/8389639/unittest-setup-teardown-for-several-tests
'programing' 카테고리의 다른 글
장고에서 카운트 주석을 위해 객체를 필터링하는 방법은 무엇입니까? (0) | 2023.06.09 |
---|---|
Initializers are not allowed in ambient contexts error when installing Blueprint (0) | 2023.06.09 |
임베디드 프로젝트용 C/C++ HTTP 클라이언트 라이브러리 (0) | 2023.06.09 |
부동 소수점 번호 구문 분석:Catch All 알고리즘이 있습니까? (0) | 2023.06.09 |
병합되지 않은 Git 분기를 찾으십니까? (0) | 2023.06.09 |