【发布时间】:2021-10-19 16:10:39
【问题描述】:
我有一个来自A 类的对象,它使用实例方法从B 类创建另一个对象。我想用attribute_to_check 和pytest 中的True 值来测试它是否正确创建
class B:
def __init__(self, attribute_to_check=None):
self.attribute_to_check = attribute_to_check or False
def some_method():
# some actions...
class A:
def __init__(self, some_attr):
self.some_attr = some_attr
...
async def create_object_b(self, something_not_relevant):
...
object_b = B(attribute_to_check=True)
object_b.some_method()
...
return None
编辑:上面的方法不返回object_b,而是使用它的方法。
测试会是这样的:
async def test_object_created():
object_A = A(some_attrs)
await object_A.create_object_b(something_not_relevant="")
# How can I access and assert object B is created with attribute_to_check == True?
我尝试为 B 类的对象创建一个夹具,但这不会测试我的意图,即来自 A 类的函数实例化 B 类的对象,其预期值为属性。
【问题讨论】:
-
你的方法
A.create_object_b应该是创建一个B类型的对象,然后返回,对吧? -
不,我认为这就是它的棘手之处。它实例化一个
B类的对象来使用它的方法。但在这种情况下,我检查它实例化的实际属性很重要。我将把它添加到问题中,谢谢@RafaelDouradoD -
方法返回的是
object_b吗?如果不是,你为什么要测试它? -
@danielsto,如果是这种情况,那么我建议您在
A中创建一个仅创建此对象B的方法,而不是另一种处理B 方法的方法。另外,根据您的代码,很明显B是使用attribute_to_check=True创建的,无需对其进行测试 -
此外,在执行
object_b = B(attribute_to_check=True)时,由于您在B的构造函数中执行self.attribute_to_check = attribute_to_check or False,因此object_b必须 具有attribute_to_check == True。请注意,如果您只是将默认值设置为False而不是None,那么分配给self.attribute_to_check的or False是多余的。X or False始终是X。