断言通过时,Python unittest调用函数

时间:2013-05-21 17:57:05

标签: python unit-testing assertions python-unittest

当测试中的断言通过时,我找不到do_something()的方法。例如:

    def test_one(self):
        self.assertEqual(1,1, "Did not match")

如果断言失败,该测试将打印“不匹配”,但在这种情况下它不会,所以我试图调用函数或在self.assertEqual()成功时打印一些东西,请任何想法?

谢谢

2 个答案:

答案 0 :(得分:4)

如果你想在某些东西通过时打印,有几个选项。但是,请不要使用Noeld's answer。并不是说它是错的,只是当print提供更好的方法时,你不希望用一堆unittest消息来混淆你的测试。

冗长

如果要打印每个test_函数的结果,请设置测试运行器的详细程度。您可以通过以下几种方式完成此操作:

  1. 从命令行使用verbose选项:

    python -m unittest discover -v

  2. 以编程方式调用unittest.main并将其传递给 verbosity argument

    if __name__ == "__main__":
        unittest.main(verbosity=2)
    
  3. “手动”运行测试

    1. 以编程方式构建TestSuite并调用 带有详细论证的TestRunner。

      suite = unittest.TestLoader().loadTestsFromModule(TestModuleName)
      results = unittest.TextTestRunner(verbosity=2).run(suite)
      
    2. 创建TestResult object的子类,其中包含addSuccess方法,只要测试通过就会调用该方法。

      然后,您可以将此TestResult对象传递给Test Suite's run method

          suite = unittest.TestLoader().loadTestsFromModule(TestModuleName)
          suite.run(myTestResult)
      
    3. 第三方选手

      看看Twisted's Trial。 它包含许多不同的Test Runners,可能很有用。默认情况下,它运行TreeReporter,如下所示:

      Trial reporting

答案 1 :(得分:1)

这有效:

import unittest


class TestupSomeStuff(unittest.TestCase):
    def setUp(self):
        pass

    def test_fail(self):
        x = 2 * 4
        self.assertEqual(x,9,"DID NOT MATCH")
        print "Passed"

    def test_pass(self):
        x = 2 * 4
        self.assertEqual(x,8,"DID NOT MATCH")
        print "Passed"





if __name__ == "__main__":
    unittest.main()

这是因为如果你的断言失败,那么测试失败然后你进入下一个测试,但是当测试成功时它会继续并返回None!

例如:

import unittest


class TestupSomeStuff(unittest.TestCase):
    def setUp(self):
        pass

    def test_fail(self):
        return None
        # This is skipped, so test is win
        x = 2 * 4
        self.assertEqual(x,9,"DID NOT MATCH")
        print "FAIL"

    def test_pass(self):
        x = 2 * 4
        self.assertEqual(x,8,"DID NOT MATCH")
        # Passed gets printed after the dot for passing the previous test.
        print "Passed"

打印:

.Passed
.
----------------------------------------------------------------------
Ran 2 tests in 0.000s

希望这会有所帮助。