Skip to main content
 首页 » 编程设计

python之单元测试没有返回值的方法

2025年05月04日21lhb25

对这样的方法进行单元测试的优雅方式是什么?

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