4

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

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

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

谢谢

4

2 回答 2

4

如果您想在某些事情通过时打印,有几个选项。但是,请不要使用Noeld 的回答。并不是说它是错误的,只是当提供更好的方法时,您不想用一堆print消息使您的测试变得混乱。unittest

冗长

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

  1. 在命令行中,使用详细选项:

    python -m unittest discover -v

  2. 以编程方式调用unittest.main并传递 详细参数

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

“手动”运行测试

  1. 以编程方式构建您的 TestSuite 并使用详细参数调用 TestRunner。

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

    然后,您可以将此 TestResult 对象传递给测试套件的 run 方法

        suite = unittest.TestLoader().loadTestsFromModule(TestModuleName)
        suite.run(myTestResult)
    

第三方跑者

看看Twisted 的审判。它包含许多可能有用的不同测试运行程序。默认情况下,它运行TreeReporter如下:

试验报告

于 2013-05-22T03:00:45.607 回答
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

希望这可以帮助。

于 2013-05-21T18:06:27.673 回答