我正在尝试提出一种测试方法的好方法,该方法通过一些循环,然后获取一个对象并调用其中一个方法。那个班有自己的测试,所以我不确定在这里测试什么。我写过它在测试用例中有不同的行为,这显然不太理想。
我正在寻找关于如何在没有条件的情况下进行测试的建议。
def direct(self, test=False):
"""
routes data in self.data_groups to
consumers in self.consumers_list
"""
if test:
output_list = []
for data_type, group in self.data_groups.items():
if test:
output_list.append(data_type)
output_list.append(group)
for consumer_name in self.consumers_list[data_type]:
for record in group:
if test:
output_list.append(record.values()[0])
else:
consumer = self.get_consumer(consumer_name,
record)
consumer_output = consumer.do_something()
if test:
return output_list
return True
答案 0 :(得分:3)
不幸的是,我不确定你所说的是可能的。我会说你可以使用一个装饰器,但如果没有完全直接覆盖,那就没用了。我不确定这对你来说是否更好,但你可以在自己的类中覆盖测试方法?这样可以使它看起来更清晰,您可以以更直观的方式对代码进行分组。
做类似的事情:
class DirectClass:
def __init__(self):
self.data_groups = dict
self.consumers_list = list
def direct(self):
"""
routes data in self.data_groups to
consumers in self.consumers_list
"""
for data_type, group in self.data_groups.items():
for consumer_name in self.consumers_list[data_type]:
for record in group:
consumer = self.get_consumer(consumer_name,
record)
consumer_output = consumer.do_something()
return True
class TestDirect(DirectClass):
def __init__(self):
DirectClass.__init__(self)
def direct(self):
output_list = []
for data_type, group in self.data_groups.items():
output_list.append(data_type)
output_list.append(group)
for consumer_name in self.consumers_list[data_type]:
for record in group:
output_list.append(record.values()[0])
return output_list
答案 1 :(得分:1)
我决定对使用者返回的对象进行子类化,这样我就可以调用相同的代码并使用过度运行(以前称为do_something)方法返回测试数据。还有比我想要的更多的ifs,但它实现了我的大部分目标。感谢@ user2916286让我在这种情况下考虑子类化。
def direct(self, test=False):
"""
routes data in self.data_groups to
consumers in self.consumers_list
"""
if test:
output_list = []
for data_type, group in self.data_groups.items():
if test:
output_list.append(data_type)
output_list.append(group)
for consumer_name in self.consumers_list[data_type]:
for record in group:
consumer = self.get_consumer(consumer_name,
record, test=test)
consumer_output = consumer.run()
if not consumer_output:
raise Exception('consumer failed')
output_list.append(consumer_output)
if test:
return output_list
return True