我用Python中的unittest编写了一些单元测试。但是,它们并不是简单地以常规方式测试对象,而是通过使用Popen调用另一个Python脚本。这是经过设计的-它是一个命令行实用程序,所以我想像用户一样测试它,包括命令行选项等)。要清楚的是,单元测试和要测试的脚本都是用Python编写的(准确地说是v3)。你知道吗
我正在测试的脚本大量使用了datetime.now(),理想情况下,我希望以某种方式模拟该值,以便使其保持不变。不过,我看到的所有这样做的例子(例如this one使用mock)都假设了某种形式的白盒测试。你知道吗
我有办法做到这一点吗?你知道吗
没有什么可以阻止您在不使用
Popen
的情况下测试CLI。您只需构建代码即可:而不是这样:
请执行以下操作:
然后,可以单独测试
main
函数(只需使用指定的一组参数调用main([...])
)。请注意,对于其他CLI框架,这也应该起作用(进行一些调整)。你知道吗另外,请注意,如果确实在使用
argparse
,则需要修补ArgumentParser()
,以便在解析失败时它不会调用sys.exit
。你知道吗一种简单的方法是声明一个
ParsingError
异常,并用以下内容修补ArgumentParser.error(self, message)
:然后可以在测试中使用
assertRaises
。你知道吗相关问题 更多 >
编程相关推荐