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
한 번만 표시 전체 테스트 케이스의 시작과 끝에서.
unittest
될 때까지 테스트를 통과 한 것으로 간주하지 않습니다 tearDown
.
setUp
및 tearDown
각 각 한 번씩 실행됩니다 test
(이 예에서는 총 이렇게 두 번) 방법 만 setUpClass
하고 tearDownClass
바로 각 한 번 실행됩니다.
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
거의 필요하지 않습니다. 그러나 위의 예 (또는 유사)를 테스트해야 할 때 유용합니다.