我可以使用实施的一部分来建立测试期望吗?

时间:2019-01-03 12:20:36

标签: python unit-testing testing mocking integration-testing

让我们在整个应用程序中多次使用DispatchQueue.main.async { self.StringSteps.text = data.numberOfSteps.stringValue} ,它返回一个包含build_help_messagetext的大词典,我需要使用attachments库发送该词典。

可以使用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)

1 个答案:

答案 0 :(得分:2)

好吧,在测试中重新实现build_help_message肯定不是更好。您可能所能做的(以及单元测试纯粹主义者可能在这里要求的内容)将是重写help_handler,以便您可以注入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)。

现在,尽管依赖注入是解决某些问题和每个开发人员都应该知道的事情的非常有力的解决方案,但以“可测试性”的名义将其应用到任何地方,最常见的是浪费时间/好处-至少当该语言具有足够的动态性以支持当然的monkeypatching时,也不一定对WRT /可读性有所帮助。

以您的示例为例,就我而言,没有更多背景信息(在不了解项目的情况下总是很难做出明智的决定),我真的不会再做更多的事情-除了单元测试{{1 }}也是,但我认为已经是事实了;-)