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