[英]Python: Correct way to test whether function/method signature has changed
[英]Correct way to test a function
可以在測試中調用build_admins_message
來構建將在模擬斷言中使用的預期結果嗎?
實現方式:
@slack_messages.on_pattern('(?i)^admins$')
def handle_admins_message(event, body, match):
team_id = event['team_id']
user_id = body['user']
message = build_admins_message(team_id, user_id)
Slack(team_id).send_message(user_id, **message)
測試:
class TestAdminsMessageHandler(TestCase):
def setUp(self):
team = SlackTeam.objects.create(team_id='TEAMID')
SlackUser.objects.create(team=team, user_id='USERID')
def tearDown(self):
SlackUser.objects.all().delete()
SlackTeam.objects.all().delete()
@mock.patch('slango.slack.Slack.send_message')
def test_correct_text(self, send_message_mock):
event = {
'team_id': 'TEAMID',
'event': {
'text': 'admins',
'user': 'USERID'
}
}
handle_admins_message(event, event['event'])
expected_message = build_admins_message('TEAMID', 'USERID')
send_message_mock.assert_called_with('USERID', **expected_message)
build_admins_message
實現:
def build_admins_message(team_id, user_id):
user = SlackUser.retrieve(team_id, user_id)
admins = SlackUser.objects.filter(
is_bot_admin=True, team__team_id=team_id).order_by(
'real_name', 'display_name')
attachments = []
if user.is_bot_admin:
attachments.append(build_admin_picker())
for admin in admins:
attachments.append(build_admin_item(user, admin))
attachments.append(build_admin_more())
return {
'text': "Here is users with admin rights:",
'attachments': attachments
}
這將取決於build_admins_message
在程序中的角色。
由於程序的不同部分都需要以相同的方式構建消息,所以這可能是可以的。 考慮一下是否可以使build_admins_message
像這樣通過依賴注入來更明確地使用。 確保您的輔助方法具有自己的測試。 (我通常會看到使用patch
作為設計氣味,但請記住,這並不意味着有問題!)
相反,如果build_admins_message
僅作為build_admins_message
的輔助函數存在,則在測試中使用它會handle_admins_message
封裝並將測試與實現過多地聯系handle_admins_message
。 在這種情況下,我只需要在測試中手動寫出預期的消息即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.