在编写单元测试时,Mock测试是隔离外部依赖的核心手段。但在实践中,代码结构的设计会直接影响测试的难易程度和维护成本。许多开发者认为,即使直接在类内部创建依赖对象(如Service
类直接实例化DAO
),也能通过Mock工具(如unittest.mock.patch
)完成测试。然而,这种方式虽然可行,却隐藏了长期维护的隐患。本文将通过对比两种代码设计方式,解释为何依赖注入(Dependency Injection)能让测试更稳健。
一、直接创建依赖的测试方式
假设有一个UserService
类,内部直接依赖UserDAO
对象:
class UserService:
def __init__(self):
self.dao = UserDAO() # 直接创建依赖
def get_user(self, user_id):
return self.dao.find_by_id(user_id)
测试代码可以通过patch
直接MockUserDAO
的方法:
from unittest.mock import patch
def test_get_user(