我有一个函数,它返回一些东西,但同时有副作用。我应该只测试这个函数返回的值还是我也需要测试副作用的结果?
@slack_interactions.on('admin_add')
def handle_admin_add(payload):
team_id = payload['team']['id']
user_id = payload['user']['id']
action_value = payload['actions'][0]['selected_options'][0]['value']
user = SlackUser.objects.find_by_ids(team_id, action_value)
if user and not user.is_bot:
user.make_admin()
return build_admins_message(team_id, user_id)
简短的回答,测试两者。
长答案:您应该始终记住,测试正在验证对于给定的输入,您是否期望特定的输出。
考虑到这一点,如果您的功能修改了状态(副作用),那么您需要验证状态是否按预期进行了修改。如果它还返回一个值,那么您需要验证返回的值是否符合预期。
只要您了解代码背后的禅意,测试就是确保代码健壮的好方法。我必须针对我的期望进行测试,并针对意外情况设计测试。
然而,单独的测试并不能产生好的代码,如果你有一个方法做两件事以上,那可能是设计不正确。通常影响状态的方法不应返回值,反之亦然。它不是一成不变的,但如果您遵循该约定,则更容易将您的系统解耦。
有一些编码原则可以防止未来的麻烦,其中之一就是单一职责原则。在这种情况下,您的功能显然违反了。我建议你看一看SOLID
编程原则,相信我,这将是值得的。一旦你采用它们,单元测试就会自然而然地发生。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句