我有:
class MyClassA:
def __init__(...):
do some stuff
create object attributes
def myfunc:
get required data
create MyClassA object(s)
store MyClassA object(s) in a list
return(list of MyClassA object(s))
现在我正在为myfunc编写单元测试,如下所示:
import unittest
class Test_myfunc(unittest.TestCase):
sample_data = ...
expected_result = ??
self.assertEqual(myfunc(sample_data), expected_result)
我应该将 expected_result 设置为什么?对于要传递的测试,它应该是一个对象列表,但是它应该具有与我将样本数据传递到myfunc时创建的相同的实例。如果我在unittest中创建另一个MyClassA实例,那么它显然会失败,因为实例会有所不同。我想验证对于myfunc输出列表中的每个对象,属性是否与sample_data匹配。这样做的正确方法是什么?
PS:我希望我的问题很清楚。答案 0 :(得分:1)
您不应该关心您的预期结果和返回的结果包含不同的实例,只是它们包含相等的实例。只需手动创建您希望myfunc
创建的实例,并确保您的类具有__eq__
的适当定义来进行比较。
答案 1 :(得分:0)
Test_myfunc可能已经过载,请考虑将其分解为更易于管理的块。
例如,某些测试用例定义可能是:
test_myfunc_returns_list
test_myfunc_list_items_are_instanceof_MyClassA
test_myfunc_contains_MyClassA_with_attributes
我们的想法是简化测试用例,以便更容易理解失败,并且错误消息可以提供信息。
最后一个测试是您可以断言单个对象中的样本数据存在的位置。如果您愿意,您还可以使用相同的想法创建更多定义 - 针对不同的MyClassA场景使用不同的案例。