Python单元测试:模拟命令行参数以进行测试

时间:2016-03-31 12:34:37

标签: python unit-testing

我正在为my_script.py中的以下函数编写单元测试:

def _parse_args():
    parser = argparse.ArgumentParser(
        description='Script to configure appliance.'
    )
    parser.add_argument('--config_file',
                        help='Path to a JSON configuration file') 
    print parser.parse_args()
    return parser.parse_args()

我想创建一个单元测试来模仿命令行提示符:

myscript.py --config_file test.json

这是我到目前为止所做的:

def test_parse_arg_test_config(self):

        test ={
                "name": "test_name",
                "category": "test_category"
            }

        # set the fake command line prompt to be:
        # myscript.py --config_file test
        # (where test is defined above)

        self.assertEquals(my_script._parse_args().config_file, test)

这显然是不完整的,但我想知道我是否正在接近这个正确的方式,因为_parse_args没有接受任何输入我不知道模仿配置文件的不同方式被传递到函数中。

1 个答案:

答案 0 :(得分:2)

将args传递给函数add argument args

def _parse_args(args):
    parser = argparse.ArgumentParser(
        description='Script to configure appliance.'
    )
    parser.add_argument('--config_file',
                        help='Path to a JSON configuration file') 
    print parser.parse_args(args)
    return parser.parse_args(args)

现在你可以这样称呼它:

self.assertEquals(my_script._parse_args(["--config_file", "test"]).config_file,"test")