首页 > 解决方案 > How to avoid execution of Python UnitTest method "addCleanup" after test case failure?

问题描述

I have the following Python UnitTest:

import unittest

class SimpleTestCases(unittest.TestCase):
    def setUp(self):
        print "\nmessage from function: setUp"
        self.createResource()
        self.addCleanup(self.cleanResource)

    def createResource(self):
        print "\nmessage from function: createResource"

    def cleanResource(self):
        print "\nmessage from function: cleanResource"

    def test_func1(self):
        print "message from function: test_func1::start"
        print "message from function: test_func1::end"

    def test_func2(self):
        print "message from function: test_func2::start"

        self.assertTrue(False)

        print "message from function: test_func2::end"

    def test_func3(self):
        print "message from function: test_func3::start"
        print "message from function: test_func3:end"

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

After the above code exution with option "-f" functions are executed in below order

python -m unittest -fb test_cases

message from function: setUp

message from function: createResource
message from function: test_func1::start
message from function: test_func1::end

message from function: cleanResource
.
message from function: setUp

message from function: createResource
message from function: test_func2::start
F
message from function: cleanResource

======================================================================
FAIL: test_func2 (test_cases.SimpleTestCases)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_cases.py", line 23, in test_func2
    self.assertTrue(False)
AssertionError: False is not true

----------------------------------------------------------------------
Ran 2 tests in 0.000s

FAILED (failures=1)

It will stop the execution after first failure but will call the "addCleanup" method.

I want to avoid to call "addCleanup" method when test function "test_func2" so the created resources can be used for debugging purpuse.

Is there any command-line option or workaround available?

标签: pythonunit-testingpython-unittest

解决方案


作为最简单的方法之一 - 只是将输入(Python 2 的 raw_input)放在 cleanResource 方法的开头。因此执行将停止,直到按下 Enter 键。

def cleanResource(self):
    temp = raw_input('wait before cleanResource')
    print("\nmessage from function: cleanResource")

另一种方法是在调试器中使用断点

import pdb

接着

pdb.set_trace()

需要的地方


推荐阅读