我正在为以下功能编写单元测试:
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()
当我在没有给出配置文件的情况下运行该函数时(使用上面函数中的print语句验证):
parser.parse_args()=Namespace(config_file=None)
在我的单元测试中,我运行没有给出配置文件的函数,并包含一个assertEquals:
self.assertEquals(my_script._parse_args(), 'Namespace(config_file=None)')
但这会产生AssertionError:
AssertionError: Namespace(config_file=None) != 'Namespace(config_file=None)'
如果我将单元测试更改为不带引号:
self.assertEquals(my_script._parse_args(), Namespace(config_file=None))
我得到一个NameError:
NameError: global name 'Namespace' is not defined
显然使用引号不是正确的方法,但我如何断言Namespace(config_file=None)
正在发生?
答案 0 :(得分:1)
检查返回的config_file
对象的Namespace
属性。
self.assertIsNone(my_script._parse_args().config_file)
答案 1 :(得分:1)
更改
userspace_return = 12
or
userspace['return'] = 12
到
self.assertEquals(my_script._parse_args(), Namespace(config_file=None))
self.assertEquals(my_script._parse_args(), argparse.Namespace(config_file=None))
是您导入的Namespace
模块的属性。您没有单独导入argparse
。
用于执行没有参数的代码的演示:
Namespace
答案 2 :(得分:0)
您的函数_parse_args()
通过调用print parser.parse_args()
返回一个名称空间对象,而不是它的字符串表示形式。
让我们来看看你的功能:
def _parse_args():
#some code
print parser.parse_args() <-- prints the string representation of the Namespace object 'Namespace(config_file=None)'
return parser.parse_args() <-- returns the Namespace object
对于返回的对象,您可以使用点表示法来访问它所持有的属性:
my_script._parse_args().config_file
并断言是否不是None:
self.assertIsNone(my_script._parse_args().config_file)
或者您可以通过调用其构造函数来创建任何Namespace对象:
argparse.Namespace (config_file = None, another_arg='some value')
并在assertEqual:
中使用它self.assertEqual(my_script._parse_args(), argparse.Namespace (config_file = None))