Python 2.6 unittest求助参数和argparse,如何解决?
Python 2.6 Unittest assistance with parameters and argparse, how to solve?
我正在尝试 运行 Python 2.6 上的基本单元测试,该单元测试采用 argparse 参数。
我的环境有限,无法安装任何其他库或使用单元测试以外的任何模块进行测试。
不过我相信答案就在这里:
How do you write tests for the argparse portion of a python module?
但是我在用我的代码重构提供的主要答案时遇到问题。
在不重构我提供的示例代码的情况下,有人可以告诉我灯并告诉我如何为下面的代码编写一个单元测试,它可以动态使用 -H 和 -S 吗?
提前致谢。
#!python
import argparse
import sys
try:
HOSTNAME = sys.argv[2]
SOMESTRING = sys.argv[3]
except IndexError:
print "Please Enter the Hostname and Somestring"
def argparse_msg():
return "testscript_example -H somehost -S somestring"
def check_arg(args=None):
parser = argparse.ArgumentParser(description="A Test Example", usage=argparse_msg())
parser.add_argument("-H", "--host",
help="HostName",
required=True)
parser.add_argument("-S", "--somestring",
help="HostName",
required=True)
results = parser.parse_args(args)
return (results.host, results.somestring)
def message_test():
print HOSTNAME + " " + SOMESTRING
def main():
message_test()
if __name__ == "__main__":
HOSTNAME, SOMESTRING = check_arg(sys.argv[1:])
main()
为了方便测试class,我修改了代码如下:
- 删除了全局变量(例如:
HOSTNAME
、SOMESTRING
)
- 向函数传递参数
- 从函数而不是打印返回字符串(来自
message_test
和 main
)
更新代码 receiver.py
:
#!python
import argparse
import sys
def argparse_msg():
return "testscript_example -H somehost -S somestring"
def check_arg(args=None):
parser = argparse.ArgumentParser(description="A Test Example", usage=argparse_msg())
parser.add_argument("-H", "--host",
help="HostName",
required=True)
parser.add_argument("-S", "--somestring",
help="HostName",
required=True)
results = parser.parse_args(args)
return (results.host, results.somestring)
def message_test(HOSTNAME, SOMESTRING):
return "{} {}".format(HOSTNAME, SOMESTRING)
def main(HOSTNAME, SOMESTRING):
return message_test(HOSTNAME, SOMESTRING)
if __name__ == "__main__":
HOSTNAME, SOMESTRING = check_arg(sys.argv[1:])
print(main(HOSTNAME, SOMESTRING))
运行receiver.py
的输出:
python receiver.py -H localhost -S demo
localhost demo
测试文件(test_receiver.py
):
from receiver import check_arg
import unittest
class ParserTest(unittest.TestCase):
def test_main(self):
HOSTNAME, SOMESTRING = check_arg(['-H', 'test', '-S', 'sample string'])
self.assertEqual(HOSTNAME, 'test')
self.assertEqual(SOMESTRING, 'sample string')
if __name__ == '__main__':
unittest.main()
运行 的输出 test_receiver.py
:
python test_receiver.py
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
我正在尝试 运行 Python 2.6 上的基本单元测试,该单元测试采用 argparse 参数。
我的环境有限,无法安装任何其他库或使用单元测试以外的任何模块进行测试。
不过我相信答案就在这里:
How do you write tests for the argparse portion of a python module?
但是我在用我的代码重构提供的主要答案时遇到问题。
在不重构我提供的示例代码的情况下,有人可以告诉我灯并告诉我如何为下面的代码编写一个单元测试,它可以动态使用 -H 和 -S 吗?
提前致谢。
#!python
import argparse
import sys
try:
HOSTNAME = sys.argv[2]
SOMESTRING = sys.argv[3]
except IndexError:
print "Please Enter the Hostname and Somestring"
def argparse_msg():
return "testscript_example -H somehost -S somestring"
def check_arg(args=None):
parser = argparse.ArgumentParser(description="A Test Example", usage=argparse_msg())
parser.add_argument("-H", "--host",
help="HostName",
required=True)
parser.add_argument("-S", "--somestring",
help="HostName",
required=True)
results = parser.parse_args(args)
return (results.host, results.somestring)
def message_test():
print HOSTNAME + " " + SOMESTRING
def main():
message_test()
if __name__ == "__main__":
HOSTNAME, SOMESTRING = check_arg(sys.argv[1:])
main()
为了方便测试class,我修改了代码如下:
- 删除了全局变量(例如:
HOSTNAME
、SOMESTRING
) - 向函数传递参数
- 从函数而不是打印返回字符串(来自
message_test
和main
)
更新代码 receiver.py
:
#!python
import argparse
import sys
def argparse_msg():
return "testscript_example -H somehost -S somestring"
def check_arg(args=None):
parser = argparse.ArgumentParser(description="A Test Example", usage=argparse_msg())
parser.add_argument("-H", "--host",
help="HostName",
required=True)
parser.add_argument("-S", "--somestring",
help="HostName",
required=True)
results = parser.parse_args(args)
return (results.host, results.somestring)
def message_test(HOSTNAME, SOMESTRING):
return "{} {}".format(HOSTNAME, SOMESTRING)
def main(HOSTNAME, SOMESTRING):
return message_test(HOSTNAME, SOMESTRING)
if __name__ == "__main__":
HOSTNAME, SOMESTRING = check_arg(sys.argv[1:])
print(main(HOSTNAME, SOMESTRING))
运行receiver.py
的输出:
python receiver.py -H localhost -S demo
localhost demo
测试文件(test_receiver.py
):
from receiver import check_arg
import unittest
class ParserTest(unittest.TestCase):
def test_main(self):
HOSTNAME, SOMESTRING = check_arg(['-H', 'test', '-S', 'sample string'])
self.assertEqual(HOSTNAME, 'test')
self.assertEqual(SOMESTRING, 'sample string')
if __name__ == '__main__':
unittest.main()
运行 的输出 test_receiver.py
:
python test_receiver.py
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK