2016-06-30 5 views
3

테스트 모듈이 아닌 별도의 파이썬 파일에 모든 사용자 정의 어설 션을 정의했습니다. 예를 들어비 테스트 모듈에서 파이 테스트 재 작성을 수행하는 방법

: 우리가 직접 테스트에 assert를 사용하는 경우 custom_asserts.py

class CustomAsserts(object): 
    def silly_assert(self, foo, bar): 
     assert foo == bar , 'some error message' 

, 우리는 매우 유용 AssertionError를,에 대한 추가 정보를 얻을 것이다. 직접의 주장 사용 테스트

출력 :

>  assert 'foo' == 'bar', 'some error message' 
E  AssertionError: some error message 
E  assert 'foo' == 'bar' 
E   - foo 
E   + bar 

그러나 우리는 우리가 별도의 모듈에 정의 된 주장 메소드를 호출하는 경우, 추가 정보가 표시되지 않습니다 것을 발견했다.

from custom_asserts import CustomAsserts 
asserts = CustomAsserts() 
def test_silly(): 
    asserts.silly_assert('foo', 'bar') 

출력 테스트 실행 한 후 :

>  assert 'foo' == 'bar', 'some error message' 
E  AssertionError: some error message 

을 그리고 우리는 또한 pytest 워드 프로세서에서 이걸 발견 : pytest은 직접 테스트 수집 프로세스에 의해 발견 테스트 모듈을 다시 작성 Advanced assertion introspection

, 그래서 모듈이 아닌 테스트 모듈을 지원하는 것은 재 작성되지 않을 것입니다.

제 질문은 pytest가 테스트 모듈과 같은 다른 모듈에 동일한 어설 션을 다시 작성하도록하는 방법이 있습니까? 아니면 그것을 달성하기 위해 어떤 해킹 방법이 있습니까?

답변

4

는 업데이트 :

는 Pytest 3.0이 정확한 기능을 구현하기 위해 새로운 방법 register_assert_rewrite을 소개했다. Pytest 3.0 이상을 사용하고 있다면, 이것을 시도해보십시오. register_assert_rewrite

원래 대답은 :

종류의 내 자신의 질문에 대답 유선있어하지만 난 해결책을 찾은 것 같아 공유하고자합니다.

트릭은 pytest가 테스트 모듈을 수집하는 방법에 있습니다. python_filespytest.ini에 정의하면 pytest가 더 많은 모듈을 테스트 모듈로 간주하게됩니다.

예를 들어, 내 경우에는, 내 모든 사용자 정의 모듈은 '주장'로 끝나는 주장한다, 그래서 내 pytest.ini은 다음과 같습니다

[pytest] 
python_files = *asserts.py test_*.py *_test.py 

또 다른 어려운 점은 conftest.py입니다. conftest.py에 asserts 모듈을 가져 오지 않아야합니다. 필자의 가정은 pytest가 assert를 다시 쓰는 데 사용하는 기술이 실제로는 .pyc 파일을 다시 쓰고, 수집하기 전에 conftest.py이로드되기 때문에 asserts 모듈을 가져 오면 모듈의 .pyc이 수집되기 전에 생성되므로 pytest를 만들 수 없다는 것입니다. .pyc 파일을 다시 작성하십시오.

내 conftest 있습니다.평, 내가 좋아하는 일을해야한다 :

@pytest.fixture(autouse=Ture) 
def setup_asserts(request): 
    from custom_asserts import CustomAsserts 
    request.instance.asserts = CustomAsserts() 

그리고 난 그냥 직접 테스트 스크립트에 키워드 assert를 사용하여 같은 추가 오류 정보를 얻을 것이다.

+0

[자신의 질문에 답변하는 것이 좋습니다.] (http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/) 웹 UI는 심지어 소프트웨어를 개발하는 동안 발견 한 중요한 것을 문서화하고 공유하는 방법으로 질문을 작성하고 즉시 대답 할 수있는 방법을 제안합니다. – clacke

관련 문제