gpt4 book ai didi

python - 编写仅测试函数是否被调用的单元测试有意义吗?

转载 作者:行者123 更新时间:2023-11-28 20:00:33 25 4
gpt4 key购买 nike

我有以下代码:

def task_completed(task):
_update_status(task, TaskStatus.COMPLETED)
successful_task(task)


def task_pending(task):
_update_status(task, TaskStatus.PENDING)
successful_task(task)


def task_canceled(task):
_update_status(task, TaskStatus.CANCELED)
process_task(task)


def successful_task(task):
process_task(task)
send_notification(task)


def process_task(task):
assign_user(task)
notify_user(task)
cleanup(task)


def _update_status(task, status):
task.status = status
task.save(update_fields=['status'])

我编写了以下测试:

def test_task_completed(mocker, task):
mock_successful_task = mocker.patch('services.successful_task')
task_completed(task)

assert task.status == TaskStatus.COMPLETED
mock_successful_task.called_once_with(task)


def test_task_pending(mocker, task):
mock_successful_task = mocker.patch('services.successful_task')
task_pending(task)

assert task.status == TaskStatus.PENDING
mock_successful_task.called_once_with(task)


def test_task_canceled(mocker, task):
mock_process_task = mocker.patch('services.process_task')
task_pending(task)

assert task.status == TaskStatus.CANCELED
mock_process_task.called_once_with(task)


def test_successful_task(mocker, task):
mock_process_task = mocker.patch('services.process_task')
mock_send_notification = mocker.patch('notifications.send_notification')

mock_process_task.called_once_with(task)
mock_send_notification.called_once_with(task)


def test_process_task(mocker, task):
mock_assign_user = mocker.patch('users.assign_user')
mock_notify_user = mocker.patch('notifications.notify_user')
mock_cleanup = mocker.patch('utils.cleanup')

mock_assign_user.called_once_with(task)
mock_notify_user.called_once_with(task)
mock_cleanup.called_once_with(task)

如您所见,test_successful_tasktest_process_task 等测试只是测试特定函数是否被调用。

但是为此编写测试是否有意义,还是我理解有误,我的单元测试很糟糕?我不知道应该如何测试这些功能的另一种解决方案。

最佳答案

根据我的经验,此类测试非常脆弱,因为它们取决于实现细节。单元测试应该只关注被测试方法的结果。理想情况下,这意味着对返回值进行断言。如果有副作用,您可以断言这些副作用。但是你可能应该看看这些副作用并找到不需要它们的不同解决方案。

关于python - 编写仅测试函数是否被调用的单元测试有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57062417/

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