如何在自包含程序中使用Python单元测试?
我想在小型自包含程序中使用Python3.3进行单元测试,也就是说,我不想将它分成命令行部分和“功能”部分,如果它在命令行上自己启动,就可以对其进行测试 所以我有一个小程序:如何在自包含程序中使用Python单元测试?,python,unit-testing,Python,Unit Testing,我想在小型自包含程序中使用Python3.3进行单元测试,也就是说,我不想将它分成命令行部分和“功能”部分,如果它在命令行上自己启动,就可以对其进行测试 所以我有一个小程序: import unittest def stradd(a, b): return a + b class test_hello(unittest.TestCase): def test_1(self): self.assertEqual(stradd("a", "b"), "ab") unit
import unittest
def stradd(a, b):
return a + b
class test_hello(unittest.TestCase):
def test_1(self):
self.assertEqual(stradd("a", "b"), "ab")
unittest.main()
print(stradd("Hello, ", "world"))
不幸的是,由于unittest.main()退出程序,因此从未到达print()。即使它不会退出,它也会在屏幕上打印出我不想在正常操作中看到的各种输出
有没有一种方法可以在没有错误的情况下以静默方式运行测试?当然,如果有些事情不起作用,他们应该大声抱怨
我看到了,但这也不能回答我的问题。只需使用python的或。然后,您就可以完全按照您想要的方式编写代码了—除了添加到程序中的test\uu
函数外,无需任何其他内容,即可通过
$ nosetests filename.py
或
当然也不需要上课:
def test():
assert stradd("a", "b") == "ab"
虽然它没有回答你“安静地跑”的部分。对我来说,这个+命令行历史记录很好用。对于C的小程序,基本上是代码片段。其他测试框架在这里没有帮助,因为这里的问题不是测试框架。已经说过,
py.test
是最好的:)
问题在于unittest.main()
函数是专门为以标准方式运行测试而设计的,它不提供以任何方式自定义此过程的方法。这给我们留下了两个选择
- 使用
在单独的进程中运行测试,使用subprocess
,检查 如果所有测试都通过,则输出并继续运行我们的程序unittest.main()
- 不要使用高级
,而是使用其他工具 由unittest模块提供unittest.main()
只要我有更多的空闲时间,我就会写这两个选项。使用普通的
unittest
模块可以达到您想要的效果。您只需要编写自己的简单测试运行程序。像这样:
导入单元测试
def stradd(a、b):
返回a+b
类测试(unittest.TestCase):
def测试_1(自身):
自评资产质量(stradd(“a”、“b”)、“ab”)
def运行我的测试(测试用例):
case=unittest.TestLoader().loadTestsFromTestCase(测试用例)
result=unittest.TestResult()
个案(结果)
如果result.wasSuccessful():
返回真值
其他:
打印(“某些测试失败!”)
对于测试,在result.failures+result.errors中出错:
打印(测试)
打印(错误)
返回错误
如果运行我的测试(测试你好):
#所有测试都通过了,所以我们可以运行我们的程序。
打印(斯特拉德(“你好”,“世界”))
run_my_tests
如果所有测试都成功通过,函数将返回True
。但是如果测试失败,它会将所有错误/失败打印到标准输出。例如:
$ python myscript.py
Hello, world
$ # And now the test fails...
$ python myscript.py
Some tests failed!
test_1 (__main__.test_hello)
Traceback (most recent call last):
File "myscript.py", line 8, in test_1
self.assertEqual(stradd("a", "c"), "ab")
AssertionError: 'ac' != 'ab'
如果这些都是简单的测试,可能是更简单的选择?为什么你链接的问题不能回答你的问题?相关:
$ python myscript.py
Hello, world
$ # And now the test fails...
$ python myscript.py
Some tests failed!
test_1 (__main__.test_hello)
Traceback (most recent call last):
File "myscript.py", line 8, in test_1
self.assertEqual(stradd("a", "c"), "ab")
AssertionError: 'ac' != 'ab'