【发布时间】:2021-09-15 12:02:17
【问题描述】:
假设我有一个简化的课程Object:
class Object:
def __init__(self, data):
self.data = data
def get_data():
return data.copy()
以及独立功能foo:
def foo(obj: Object):
copied_data = obj.get_data()
...
我想测试foo 并使用带有模拟Object 实例的夹具作为参数传递给foo。我希望模拟对象返回一些预定义的数据,所以我也需要模拟它的方法。
我应该如何使用 pytest 以“正确”的方式执行此操作?我不确定如何组合模拟和固定装置。
【问题讨论】:
-
没有什么可嘲笑的。
foo已经获取了您可以提供的任何对象,因此只需创建一个包含测试所需数据的对象,然后在调用时将其传递给foo。 -
@chepner 我只需要这些数据,但同时我需要传递整个对象。跳过对象的整个创建不是有益的吗?实际上类和构造函数显然比这里更复杂
-
如果创建
Object的实例比创建模拟更昂贵,那么您可能在Object.__init__中做的工作太多。 -
但也许您只是在谈论将
Mock的实例作为参数传递给foo,而不是Object的实际实例。那里也没什么特别的。
标签: python python-3.x mocking pytest