请帮助我编写单元测试:
我有一个简单的程序,只有一个函数,当运行带有a解析参数--double的程序时,它只返回双倍的“名称”。否则返回一个名称。
# code.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("name")
parser.add_argument('-d', '--double', action="store_true")
args = parser.parse_args()
def double_name(new_name):
if args.double:
return new_name + new_name
else:
return new_name
print(double_name(args.name))我有一个结果:test-name
python code.py test-name -d我有一个结果:test-nametest-name我想编写unittest来检查这个函数,但是我不知道如何在单元测试中使用how解析参数调用这个函数。
# test_code.py
import unittest
import code
class Test_Code(unittest.TestCase):
def test_double_name(self):
# without -d
self.assertEqual(code.double_name('test-name'), 'test-name')
# with -d
self.assertEqual(code.double_name('test-name'), 'test-nametest-name')
if __name__ == "__main__":
unittest.main()这个测试应该如何看待run命令?如果我添加到代码中:
code.args = code.parser.parse_args(["test-name", "-d"])标准命令python -m unittest test_code.py raise python -m unittest test_code.py
AttributeError:‘模块’对象没有属性'py'
发布于 2021-01-25 14:48:11
您可以使用自己的参数列表调用parse_args,让它生成一个可供使用的适当值。这需要稍微重写code,以避免在导入时调用parse_arg:
# code.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("name")
parser.add_argument('-d', '--double', action="store_true")
def double_name(new_name):
if args.double:
return new_name + new_name
else:
return new_name
if __name__ == "__main__":
args = parser.parse_args()
print(double_name(args.name))然后
# test_code.py
import unittest
import code
class Test_Code(unittest.TestCase):
def test_double_name(self):
code.args = code.parser.parse_args([])
self.assertEqual(code.double_name('test-name'), 'test-name')
code.args = code.parser.parse_args(["-d"])
self.assertEqual(code.double_name('test-name'), 'test-nametest-name')
if __name__ == "__main__":
unittest.main()在测试函数中,需要确保设置code.args的值,因为这是code.double_name使用的变量。
https://stackoverflow.com/questions/65886922
复制相似问题