【发布时间】:2020-05-29 05:38:31
【问题描述】:
您好,我想测试我的可执行模块main.py。
在这个模块中有一个函数main(),它接受两个参数:
# main.py
def main(population_size: int, number_of_iterations: int):
...
在这个模块的底部有一个接受命令行参数并执行main函数的逻辑:
# main.py
if __name__ == "__main__":
# create parser and handle arguments
PARSER = argparse.ArgumentParser()
PARSER.add_argument("--populationSize",
type=int,
default=-1,
help="Number of individuals in one iteration")
PARSER.add_argument("--numberOfIterations",
type=int,
default=-1,
help="Number of iterations in one run")
# parse the arguments
ARGS = PARSER.parse_args()
main(ARGS.populationSize, ARGS.numberOfIterations)
我想测试传递命令行参数。我的测试方法不起作用:
# test_main.py
@staticmethod
@mock.patch("argparse.ArgumentParser.parse_args")
@mock.patch("main.main")
def test_passing_arguments(mock_main, mock_argparse):
"""Test passing arguments."""
mock_argparse.return_value = argparse.Namespace(
populationSize=4, numberOfIterations=3)
imp.load_source("__main__", "main.py")
mock_main.assert_called_with(4, 3)
我得到的错误是 mock_main 没有被调用。我不知道为什么。据我了解,我从 main 模块中模拟了 main 函数。模拟main函数是必要的,因为它很耗时,我只想在这里测试的是参数是否正确传递。
来自this post 我采取了模拟 argparse 模块的方式。
【问题讨论】:
标签: python unit-testing mocking argparse