断言通过时Python unittest调用函数

断言通过时Python unittest调用函数,python,unit-testing,assertions,python-unittest,Python,Unit Testing,Assertions,Python Unittest,当测试中的断言通过时,我找不到一种方法来执行\u something()。例如: def test_one(self): self.assertEqual(1,1, "Did not match") import unittest class TestupSomeStuff(unittest.TestCase): def setUp(self): pass def test_fail(self): return No

当测试中的断言通过时,我找不到一种方法来执行\u something()。例如:

    def test_one(self):
        self.assertEqual(1,1, "Did not match")
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"
如果断言失败,该测试将打印“不匹配”,但在本例中不会,因此我尝试在self.assertEqual()成功时调用一个函数或打印一些内容,请注意

谢谢

这很有效:

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()
这是因为如果断言失败,那么测试将失败,您将进入下一个测试,但是,当测试成功时,它将继续进行,并且不会返回任何结果

例如:

    def test_one(self):
        self.assertEqual(1,1, "Did not match")
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

希望这有帮助

如果您想在某些内容通过时打印,有几个选项。但是,请不要使用。这并不是说这是错误的,只是当
unittest
提供了更好的方法时,您不想用一堆
print
消息来扰乱您的测试

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

  • 在命令行中,使用以下选项:

    python-m单元测试发现-v

  • 以编程方式调用
    unittest.main
    并将

  • “手动”运行测试
  • 以编程方式构建测试套件并调用 带有详细参数的TestRunner

    suite = unittest.TestLoader().loadTestsFromModule(TestModuleName)
    results = unittest.TextTestRunner(verbosity=2).run(suite)
    
  • 创建的子类,该子类包含在测试通过时调用的方法

    然后可以将这个TestResult对象传递给

  • 第三方跑步者 看一看。 它包含许多可能有用的不同功能。默认情况下,它运行
    TreeReporter
    ,如下所示:


    虽然这有助于实现OP想要的功能,但使用内置工具实现同一功能的方法有很多种。Fair point只是想演示一种打印消息的简单方法,而无需对方法进行子类化即可获得不同的消息。回答很好。当你使用Unittest时,使用print是一个坏主意,它有弄坏标准输出的习惯,并且它经常会使打印语句在实际触发时变得不清楚。更好的方法是不依赖stdout,而是使用pythons日志子系统。