Python 프레임 워크 에서 setUp()
와 의 차이점은 무엇입니까 ? 설정이 다른 방법보다 한 가지 방법으로 처리되는 이유는 무엇입니까?setUpClass()
unittest
내가 설정의 일부가 이루어집니다 이해하려면 setUp()
와 setUpClass()
가진뿐만 아니라, 기능 tearDown()
및 tearDownClass()
.
답변
클래스에 테스트 메서드가 두 개 이상있을 때 차이가 나타납니다. setUpClass
및 tearDownClass
전체 클래스에 대해 한 번 실행됩니다; setUp
그리고 tearDown
전에 각 시험 방법 후 실행됩니다.
예를 들면 :
class Example(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("setUpClass")
def setUp(self):
print("setUp")
def test1(self):
print("test1")
def test2(self):
print("test2")
def tearDown(self):
print("tearDown")
@classmethod
def tearDownClass(cls):
print("tearDownClass")
이 테스트를 실행하면 다음이 인쇄됩니다.
setUpClass
setUp
test1
tearDown
.setUp
test2
tearDown
.tearDownClass
(도트는 ( .
)이다 unittest
테스트가 통과 할 때의 기본 출력.) 것을 관찰 setUp
및 tearDown
전후에 표시 test1
하고 test2
반면에, setUpClass
그리고 tearDownClass
한 번만 표시 전체 테스트 케이스의 시작과 끝에서.
답변
Python 프레임 워크 에서 setUp()
와 의 차이점은 무엇입니까 ?setUpClass()
unittest
주요 차이점 (Benjamin Hodgson의 답변에서 언급했듯이)은 setUpClass
한 번만 setUp
호출되고 모든 테스트 전에 호출 되는 반면 각 테스트 직전에 호출 된다는 것입니다 . (주의 : Python뿐만 아니라 다른 xUnit 테스트 프레임 워크의 동등한 메서드에도 동일하게 적용됩니다 unittest
.)
로부터 unittest
문서 :
setUpClass()
개별 클래스의 테스트가 실행되기 전에 호출되는 클래스 메서드입니다. setUpClass는 클래스를 유일한 인수로 사용하여 호출되며 classmethod ()로 데코 레이팅되어야합니다.
@classmethod
def setUpClass(cls):
...
과:
setUp()
테스트 픽스처를 준비하기 위해 호출 된 메서드입니다. 이것은 테스트 메서드를 호출하기 직전에 호출됩니다. AssertionError 또는 SkipTest 이외의이 메서드에서 발생한 모든 예외는 테스트 실패가 아닌 오류로 간주됩니다. 기본 구현은 아무것도하지 않습니다.
설정이 다른 방법보다 한 가지 방법으로 처리되는 이유는 무엇입니까?
질문의이 부분은 아직 답변되지 않았습니다. Gearon의 답변에 대한 내 의견에 따르면이 setUp
방법은 모든 테스트에 공통적 인 고정 장치 요소를 의미합니다 (각 테스트에서 해당 코드가 중복되는 것을 방지하기 위해). 중복을 제거하면 (일반적으로) 가독성이 향상되고 유지 관리 부담이 줄어들 기 때문에 유용합니다.
이 setUpClass
방법은 데이터베이스 연결 열기, 파일 시스템에서 임시 파일 열기, 테스트를 위해 공유 라이브러리로드 등과 같이 한 번만 수행하면되는 값 비싼 요소를위한 것입니다. 각 테스트 전에 이러한 작업을 수행하면 속도가 느려집니다. 테스트 스위트가 너무 많아서 모든 테스트 전에 한 번만 수행합니다. 이것은 테스트의 독립성이 약간 저하되지만 일부 상황에서는 필요한 최적화입니다. 틀림없이, 실물을 사용하지 않고 데이터베이스 / 파일 시스템 / 라이브러리 / 무엇이든 조롱하는 것이 일반적으로 가능하기 때문에 단위 테스트에서 그런 일을해서는 안됩니다. 따라서 setUpClass
거의 필요하지 않습니다. 그러나 위의 예 (또는 유사)를 테스트해야 할 때 유용합니다.