Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在自包含程序中使用Python单元测试?_Python_Unit Testing - Fatal编程技术网

如何在自包含程序中使用Python单元测试?

如何在自包含程序中使用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

我想在小型自包含程序中使用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")

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.main()
    ,而是使用其他工具 由unittest模块提供

只要我有更多的空闲时间,我就会写这两个选项。

使用普通的
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'