Hey TJ 내가 작성한 한 가지 기능 (테스트 코드가 아닌 테스트중인 코드)을 보여줄 수 있다면 예제 테스트를 제공 할 수 있습니다. 일반적으로 생각
:
1.A 당신은 외부 API에 대한 호출을 조롱 것입니다, 당신은 자신의 인증 메커니즘, 또는 인터넷에 연결되어 있는지 여부를 테스트하려고하지 않습니다. 당신은 올바른 서명으로 API를 호출하고 있는지 테스트하려고합니다.
1.b 파이썬에서의 조롱은 비교적 간단합니다. 나는 일반적으로 mocking library written by Michael Foord을 사용합니다. pip install mock
이 시작됩니다. 그럼 당신은이 예에서
import unittest
from mock import call, patch
from my_module import wrapper_func
class ExternalApiTest(unittest.TestCase):
@patch('my_module.api_func')
def test_external_api_call(self, mocked_api_func):
response = wrapper_func('user', 'pass')
self.assertTrue(mocked_api_func.called)
self.assertEqual(
mocked_api_func.call_args_list,
[call('user', 'pass')]
)
self.assertEqual(mocked_api_func.return_value, response)
우리가 모의 객체 my_module
내부의 api_func
를 교체하는 등의 작업을 수행 할 수 있습니다. mock 객체는 수행 된 작업을 기록합니다. 을 기억하는 것이 중요합니다. 패치 할 곳은입니다. 개체를 가져온 위치를 패치하지 않습니다. 그것을 사용할 위치에서 패치합니다.
코드가 주어진 입력으로 올바른 작업을 수행하는지 테스트합니다. 순수 함수를 테스트하는 것은 매우 간단합니다. 주어진 a가 주어 졌다고 가정하면,이 함수는 b를 리턴합니다. 함수에 많은 부작용이있을 때 좀 더 까다로워집니다.
특정 기능을 테스트하기가 너무 어렵거나 복잡하면 코드 작성이 잘못되었다는 것을 의미 할 수 있습니다. 이를 테스트 가능한 덩어리로 분해하여 객체를 함수로 전달하지 않고 가능하면 원시를 전달하려고합니다.