假设我在整个应用程序中多次使用build_help_message
,它返回一个大字典,其中包含我需要使用Client
库发送的text
和attachments
可以使用build_help_message
在测试中生成预期结果吗?如果这不是一个好的做法,我如何避免这样做
def help_handler(payload):
team_id = payload['team_id']
user_id = payload['user_id']
message = build_help_message(team_id, user_id)
Client(team_id).send_message(user_id, **message)
测验
class TestHandler(TestCase):
def setUp(self):
team = Team.objects.create(team_id='TEAMID')
User.objects.create(team=team, user_id='USERID')
def tearDown(self):
...
@mock.patch('client.Client.send_message')
def test_correct_text(self, send_message_mock):
payload = {'team_id': 'TEAMID', 'user_id': 'USERID'}
handle_message(payload)
expected_message = build_help_message('TEAMID', 'USERID')
send_message_mock.assert_called_with('USERID', **expected_message)
嗯,在测试中重新实现
build_help_message
肯定不是更好。您可以做的(以及unittest纯化论者在这里可能建议的)是重写help_handler
,以便可以注入build_message
依赖项,即:然后也模拟
build_message
——但是单元测试纯粹主义者也希望您对Client
(而不是使用Mock
)也这样做虽然依赖注入是解决某些问题的非常强大的解决方案,也是每个开发人员都应该知道的事情,以“可测试性”的名义在任何地方应用它通常都是在浪费时间,至少在语言动态性足以支持monkeypatching的情况下是这样,而且也不一定有助于提高wrt/可读性
就你的例子而言,就我而言,没有更多的背景(在不了解项目的情况下,总是很难做出明智的决定),我真的不会再做任何事情了——当然,除了单元测试
build_help_message
,但我认为这已经是事实;-)相关问题 更多 >
编程相关推荐