对这样的方法进行单元测试的优雅方式是什么?
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 文件。有没有一种优雅的单元测试方法?还是我应该考虑重构我的方法,使其对单元测试更友好并针对某些内容进行断言?
请您参考如下方法:
这样做的标准方法是使用 patch 和 mock 来模拟 FeedGenerator 类。
如果您将 FeedGenerator 作为参数传入,则无需补丁:
def generate_feed(file_list: List[File], fg: FeedGenerator) -> None:
# do stuff to fg based on file_list
现在你的测试可以做:
file_list = [File("foo"), File("bar")] # or whatever?
fg = MagicMock(spec=FeedGenerator)
generate_feed(file_list, fg)
assert fg.add_entry.call_count == len(file_list)
# etc
