2016-12-19 10 views
5

저는 PyPI에서 모듈을 가져 오는 응용 프로그램을 가지고 있습니다. 해당 응용 프로그램의 소스 코드에 대한 unittest를 작성하려고하지만 해당 테스트에서 PyPI의 모듈을 사용하고 싶지 않습니다.
전적으로 조롱하고 싶습니다 (테스트 컴퓨터에는 PyPI 모듈이 들어 있지 않으므로 가져 오기가 실패합니다).전체 모듈을 파이썬으로 모방하십시오.

현재 단위 테스트에서 테스트하려는 클래스를로드하려고 할 때마다 즉시 가져 오기 오류가 발생합니다. 그래서 약 어쩌면

try: 
    except ImportError: 

를 사용하고 가져 오기 오류를 잡을 생각, 다음 command_module.run()를 사용합니다. 이것은 꽤 위험한/못 생겼고 또 다른 방법이 있는지 궁금해하고있었습니다.

또 다른 아이디어는 PyPI 모듈을 랩핑하기위한 어댑터를 작성하는 것이 었습니다. 그러나 저는 여전히 그것에 대해 연구 중입니다.

전체 파이썬 패키지를 조롱 할 수있는 방법을 알고 있다면 매우 감사하겠습니다. 감사합니다. .

답변

2

파이썬 가져 오기 시스템을 파고 싶다면 David Beazley's talk을 적극 권장합니다.

특정 질문에 대해서는 종속성이없는 모듈을 테스트하는 예가 있습니다.

bar.py - 테스트 할 모듈 my_bogus_module이

from my_bogus_module import foo 

def bar(x): 
    return foo(x) + 1 

mock_bogus.py없는 - 모의 모듈

from mock import Mock 
import sys 
import types 

module_name = 'my_bogus_module' 
bogus_module = types.ModuleType(module_name) 
sys.modules[module_name] = bogus_module 
bogus_module.foo = Mock(name=module_name+'.foo') 

test_bar.py를로드 당신의 검사 결과와의 파일 - bar.pymy_bogus_module을 테스트 을 (를) 사용할 수 없습니다.

import unittest 

from mock_bogus import bogus_module # must import before bar module 
from bar import bar 

class TestBar(unittest.TestCase): 
    def test_bar(self): 
     bogus_module.foo.return_value = 99 
     x = bar(42) 

     self.assertEqual(100, x) 

테스트를 실행할 때 실제로 my_bogus_module이 유효하지 않은지 확인하면 조금 더 안전 할 것입니다. 또한 가져 오기를 시도하는 pydoc.locate() 메서드를 살펴보고 실패 할 경우 None을 반환 할 수 있습니다. 공개 방법 인 것 같지만 실제로 문서화 된 것은 아닙니다.

+0

이것은 내가 찾고있는 것입니다. 감사합니다. – TzurEl