我正在为我的Python脚本编写一些单元测试
。该脚本允许用户覆盖参数的值。
python paramParser.py -d C:\\Path\\to\\yourfile\\xxx.m -p 'xxxParamName' -v 20
-d
文件名,其中可能包含参数名称和值
-p
参数名称
-v
参数值
脚本会读取文件,如果其中存在该参数,则会获取其值,并将其写入带有新值的另一个文件中。
从命令行运行此代码可以成功覆盖参数的值。
以下是我的代码:
import unittest
import paramParser
class Tests(unittest.TestCase):
def testOneIntValue(self):
result = paramParser.main(["-d C:\\Path\\to\\yourfile\\xxx.m", "-p 'xxxParamName'", "-v 3"])
self.assertTrue('xxxParamName.Value= 3', result)
def testMultipleIntValues(self):
result = paramParser.main(["-d C:\\Path\\to\\yourfile\\xxx.m", "-p 'xxxParamName'", "-v 3"])
self.assertTrue('[ xxxParamName.Value = [ 1 2 3 ]', result)
def testTrueBoolean(self):
result = paramParser.main(["-d C:\\Path\\to\\yourfile\\xxx.m", "-p 'xxxParamName'", "-v true"])
self.assertTrue('xxxParamName.Value = true', result)
if __name__ == '__main__':
unittest.main()
测试始终通过,有什么想法我做错了什么吗?
编辑 我试着按照这个人的方式去做:argparse fails when called from unittest test
def testOneValue(self):
parsed = paramParser.main(["-d","C:\\Path\\to\\yourfile\\xxx.m", "-p", "xxxParamName", "-v", "3"])
self.assertEqual(parsed["d"], "C:\\Path\\to\\yourfile\\xxx.m")
self.assertEqual(parsed["p"], "xxxParamName")
self.assertEqual(parsed["v"], "3")
虽然他的代码能够通过[]和参数分离来传递参数,但我的不能。我收到了以下错误信息:
TypeError: 'NoneType' object has no attribute '__getitem__'
关于上一个问题的快速更新。我忘记在我的def main()中添加一个return。现在测试已经有效。
unittest
的实际文档? - jonrsharpeassertTrue
的第一个参数是一个可以转换为bool
的对象,而不是您提供的字符串形式的布尔语句(这是您正在提供的)。看起来assertEqual
对前两个可能更有用。 - cdarkeargparse
单元测试文件以获取更多的想法,位于Lib/test/test_argparse.py
- 不过它包含的内容可能比你的代码需要的要多。 - hpaulj