gpt4 book ai didi

python - 我可以使用部分实现来建立测试期望吗?

转载 作者:行者123 更新时间:2023-11-28 20:26:36 24 4
gpt4 key购买 nike

假设我在整个应用程序中多次使用 build_help_message,它返回一个大字典,其中包含我需要的 textattachments使用 Client 库发送。

是否可以使用 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 以便您可以注入(inject) build_message 依赖项,即:

def help_handler(payload, build_help_message=build_help_message):
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)

然后也模拟 build_message - 但单元测试纯粹主义者也希望您对 Client 做同样的事情(而不是使用 Mock) .

虽然依赖注入(inject)是解决某些问题的非常强大的解决方案,也是每个开发人员都应该知道的事情,但以“可测试性”的名义在任何地方应用它往往是浪费时间/好处 - 至少当然,当语言足够动态以支持 monkeypatching 时——也不一定有助于 wrt/可读性。

对于你的例子,就我而言,没有更多的上下文(在不了解项目的情况下做出明智的决定总是很困难),我真的不会费心做更多的事情 - 当然单元测试除外 build_help_message 也是,但我认为情况已经如此 ;-)

关于python - 我可以使用部分实现来建立测试期望吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54022203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com