我有以下代码:
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_task
和 test_process_task
等测试只是测试特定函数是否被调用。
但是为此编写测试是否有意义,还是我理解有误,我的单元测试很糟糕?我不知道应该如何测试这些功能的另一种解决方案。
最佳答案
根据我的经验,此类测试非常脆弱,因为它们取决于实现细节。单元测试应该只关注被测试方法的结果。理想情况下,这意味着对返回值进行断言。如果有副作用,您可以断言这些副作用。但是你可能应该看看这些副作用并找到不需要它们的不同解决方案。
关于python - 编写仅测试函数是否被调用的单元测试有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57062417/