当测试中的断言通过时,我找不到do_something()的方法。例如:
def test_one(self):
self.assertEqual(1,1, "Did not match")
如果断言失败,该测试将打印“不匹配”,但在这种情况下它不会,所以我试图调用函数或在self.assertEqual()成功时打印一些东西,请任何想法?
谢谢
答案 0 :(得分:4)
如果你想在某些东西通过时打印,有几个选项。但是,请不要使用Noeld's answer。并不是说它是错的,只是当print
提供更好的方法时,你不希望用一堆unittest
消息来混淆你的测试。
如果要打印每个test_
函数的结果,请设置测试运行器的详细程度。您可以通过以下几种方式完成此操作:
从命令行使用verbose选项:
python -m unittest discover -v
以编程方式调用unittest.main
并将其传递给
verbosity
argument
if __name__ == "__main__":
unittest.main(verbosity=2)
以编程方式构建TestSuite并调用 带有详细论证的TestRunner。
suite = unittest.TestLoader().loadTestsFromModule(TestModuleName)
results = unittest.TextTestRunner(verbosity=2).run(suite)
创建TestResult object的子类,其中包含addSuccess方法,只要测试通过就会调用该方法。
然后,您可以将此TestResult对象传递给Test Suite's run method。
suite = unittest.TestLoader().loadTestsFromModule(TestModuleName)
suite.run(myTestResult)
看看Twisted's Trial。
它包含许多不同的Test Runners,可能很有用。默认情况下,它运行TreeReporter
,如下所示:
答案 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
希望这会有所帮助。