2016-09-19 7 views
1

작업하는 동안 SVN 분기를 만드는 엔티티가 있다고 가정합니다. 나는 여러 거의 같은 방법을 만드는 기능 테스트를 수행하려면 (I 프레임 워크 유닛 테스트에 파이썬을 사용하지만 문제는 어떤 테스트 프레임 워크 관련) :tearDown 메서드에 매개 변수 전달

class Tester(unittest.TestCase): 

def test_valid1_url(self): 
    url="valid1" 
    BranchCreator().create_branch(url) 
    self.assertUrlExists(url) # assume I have this method implemented 

def test_valid2_url(self): 
    url="valid2" 
    BranchCreator().create_branch(url) 
    self.assertUrlExists(url) # assume I have this method implemented 

def test_invalid_url(self): 
    url="invalid" 
    self.assertRaises(ValueError, BranchCreator().create_branch, url) 

을 나는 결과 분기를 제거하거나 테스트가 실패하면 아무것도 할하려는 각 시험 후.

@teardown_params(url='valid1') 
def test_valid1_url(self): 

def tearDown(self, url): 
    if (url_exists(url)): remove_branch(url) 

를하지만의 tearDown 어떤 매개 변수를 허용하지 않습니다 : 이상적으로는 다음과 같은 것을 사용합니다. 내가 볼 몇 가지 아주 더러운 솔루션 :

A), 테스터 필드 "used_url"를 작성하는 모든 방법에서 설정 해체에 사용

def test_valid1_url(self): 
    self.used_url="valid1" 
    BranchCreator().create_branch(self.used_url) 
    self.assertUrlExists(url) 
... 
def tearDown(self): 
    if (url_exists(self.used_url)): remove_branch(self.used_url) 

그것은 작동해야하기 때문에 (적어도 내 환경에서) 모든 테스트가 순차적으로 실행되므로 충돌이 발생하지 않습니다. 그러나이 솔루션은 공유 변수로 인한 테스트 독립성 원칙을 위반합니다. 테스트를 동시에 시작하면 관리가 작동하지 않습니다.

B) cleanup(self, url) 같은 별도의 방법을 사용하고있는 모든 방법

다른 방법이 있습니까에서 호출?

+0

"tearDown"이 테스트 프레임 워크에 추가되어서는 안된다고 생각하는 사람들이 있습니다. ''b'' 해결책을 올바른 것으로 만드십시오. 중복을 제거하기 위해 적절한 예외 처리를 사용하여 매개 변수화 된 테스트를 작성합니다. – zhon

답변

0

필자는 모든 테스트에서 도우미 메서드를 호출해야하는 경우에도 b) 솔루션이 작동 할 수 있다고 생각하며 일종의 복제와 같은 소리입니다. 다른 접근법은 "assertUrlExists"함수 내에서 도우미 메서드를 호출하는 것일 수 있습니다. 이렇게하면 중복이 제거되고 정리를 관리하기 위해 URL의 존재를 다시 확인하지 않아도됩니다. 단정 결과가 있고이를 사용할 수 있습니다.