Python 테스트 더블 doublex 라이브러리 알아보기
오늘은 Python에서 가상의 객체를 만들어서 테스트할 수 있는 테스트 더블의 doublex 라이브러리를 알아보려 합니다.
doublex 설치
우선 virtualenv로 파이썬 환경을 분리해줍니다.
pip3 install virtualenv
virtualenv -mvenv env
env라는 이름의 가상 환경을 생성합니다.
source env/bin/activate
가상환경을 폴더에서 활성화합니다.
pip3 install --upgrade pip
pip의 업그레이드가 존재하는지 확인하고 진행합니다.
pip install doublex
pip로 doublex를 설치합니다.
stub
원하는 반환 값을 가질 수 있게 합니다.
from doublex import Stub, ANY_ARG
doublex를 가져옵니다.
class Collaborator:
def except_method(self):
pass
def add_method(self, a, b):
pass
테스트할 클래스를 만듭니다.
with Stub(Collaborator) as stub:
stub.except_method().raises(KeyError)
stub.add_method(ANY_ARG).returns(4)
해당 클래스의 stub을 생성하고 메소드들의 반환 값을 정해줍니다.
print(stub.add_method(2, 3))
해당 stub은 무조건 4가 반환됩니다.
try:
stub.except_method()
except KeyError:
print("key error!")
해당 stub은 KeyError가 발생합니다.
free stub
from doublex import Stub
doublex를 가져옵니다.
with Stub() as stub:
stub.example('test').returns(10)
result = stub.example('test')
print(result)
클래스 없이도 stub을 생성해서 특정 반환 값으로 지정할 수 있습니다.
spy
Spy는 Stub을 확장하여 생성 후 호출에 대해 전달할 수 있습니다.
from doublex import Spy
doublex를 가져옵니다.
class Sender:
def send_method(self, address, force=True):
pass
클래스를 만듭니다.
sender = Spy(Sender)
sender.send_method("example@example.net")
Spy객체를 만들고 값을 넣습니다.
try:
sender.send_method()
except TypeError:
print("argument error")
테스트할 메소드는 인자가 존재하므로 인자없이 수행하면 오류가 발생합니다.
mock
from doublex import Mock
with Mock() as mock:
mock.test().returns(10)
print(mock.test())
mock을 만들고 특정 메소드의 반환 값을 지정할 수 있습니다.
Written on June 30, 2019