对这样的方法进行单元测试的一种优雅方法是什么?
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
的参数。
def generate_feed(file_list, fobj="podcast.xml"):
fg = FeedGenetaror()
for f in file_list:
fe = fg.add_entry()
fg.rss_str(pretty=True)
fg.rss_file(fobj)
在生产中,您可以编写
with open("podcast.xml", "w") as f:
generate_feed(file_list, f)
或简单地
generate_feed(file_list)
为了进行测试,可以使用
StringIO
对象。f = io.StringIO()
generate_feed(file_list, f)
然后,您可以测试
f
的内容(通过f.getvalue()
),就像它是您生成的XML文件一样。