【发布时间】:2017-06-01 18:23:37
【问题描述】:
我经常需要编写一个命令行脚本,该脚本将从数据库中读取数据,执行一些分析,然后将结果写回数据库。我解耦和创建单独数据层的努力通常是编写脚本load.py、write.py 和do_analytics.py,其中 load 和 write 进行数据库交互,do_analytics.py 文件是这样的:
import load
import write
def batch_classify(model_filepath='my_model.pkl'):
with open(model_filepath, 'rb') as infile:
model = pickle.load(infile)
data_loader = load.DataLoader()
data_loader.load_data()
data_loader.clean_data()
data = data_loader.data
# Maybe do some more manipulations here...
output = model.transform(data)
data_writer = write.DataWriter()
data_writer.write_data(output)
if __name__ == "__main__":
# maybe would have some command line options here to pass to batch_classify
batch_classify()
我现在想测试一些固定的数据集,并确保分类(输出)结果符合我的预期。我现在不需要测试实际的数据库连接,所以根据一些研究,我想我想像this post 那样进行模拟,但我不确定应该模拟什么级别的对象,如何正确重构为实际测试一旦我有了模拟对象,如果这甚至是最好的方法。之前出现这种情况时,我四处寻找可以通过实际数据库中的小型固定测试表工作的解决方案,但它从来都不是优雅或干净的代码。
【问题讨论】:
标签: python unit-testing testing mocking integration-testing