对这样的方法进行单元测试的一种优雅的方法是什么
from feedgen.feed import FeedGenerator
def generate_feed(file_list):
fg = FeedGenerator()
for f in file_list:
fe = fg.add_entry()
fg.rss_str(pretty=True)
fg.rss_file('podcast.xml')
显然,该方法不返回任何值,而是编写一个xml文件。有没有一种优雅的单元测试方法?或者我应该研究重构我的方法,使它更易于单元测试并针对某些东西进行断言
rss_file
可以采用文件名或类似文件的对象作为其参数。重写generate_feed
以接受传递给rss_file
的参数在生产中,你可以写
或者只是
对于测试,可以使用
StringIO
对象然后可以测试
f
(通过f.getvalue()
)的内容,就好像它是您生成的XML文件一样您可以测试文件是否在正确的路径中创建,然后删除它(因为这只是一个测试),如果这对您适用的话。您甚至可以读取该文件以查看其设置是否正确
您还可以让函数在写入文件成功或失败时返回
True
或False
,并测试这些情况(例如,如果您知道有应该失败的边缘情况)另一个有用的测试就是检查这个方法在各种情况下不会产生错误
标准的方法是使用
patch
和mock
来模拟FeedGenerator
类如果将
FeedGenerator
作为参数传入,则不需要patch
:现在您的测试可以:
相关问题 更多 >
编程相关推荐