我有以下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()
在上述带有选项“ -f”的代码提取之后,将按以下顺序执行
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)
它将在第一次失败后停止执行,但会调用“ addCleanup” 方法。
我想避免在测试功能“ test_func2” 时调用“ addCleanup” 方法,以便将创建的资源用于调试目的。
是否有任何命令行选项或解决方法?
答案 0 :(得分:1)
最简单的方法之一是将输入(对于Python 2为raw_input)放在cleanResource方法的开始。 因此,执行将一直停止,直到按下Enter键为止。
// Require production configuration
const productionConfig = require('./webpack.production');
// Constants
const ENV_DEVELOPMENT = 'development';
const ENV_PRODUCTION = 'production';
module.exports = function () {
const env = process.env.NODE_ENV || ENV_DEVELOPMENT;
process.env.BABEL_ENV = env;
return env === ENV_PRODUCTION ? productionConfig : developmentConfig;
};
另一种方法是在调试器中使用断点
def cleanResource(self):
temp = raw_input('wait before cleanResource')
print("\nmessage from function: cleanResource")
然后
import pdb
需要的地方
答案 1 :(得分:0)
根据单元测试文档doCleanups(),该方法负责调用所有清除方法。
一种方法是在doCleanups方法中检查测试用例的结果,如果测试用例失败,则弹出所有清理方法并跳过其余测试用例
下面是代码:
import unittest
class SimpleTestCases(unittest.TestCase):
FAILURE = False
def setUp(self):
print "\nmessage from function: setUp"
if SimpleTestCases.FAILURE:
self.skipTest("Test is skipped due to first failure")
return super(SimpleTestCases, self).setUp()
self.createResource()
self.addCleanup(self.cleanResource)
def createResource(self):
msg = "\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"
def doCleanups(self):
print "message from function: doCleanups"
if SimpleTestCases.FAILURE:
return super(SimpleTestCases, self).doCleanups()
result = getattr(self, '_outcomeForDoCleanups', self._resultForDoCleanups)
ok_result = True
exc_list = getattr(result, 'failures')
if exc_list and exc_list[-1][0] is self:
ok_result = ok_result and not exc_list[-1][1]
if not ok_result:
SimpleTestCases.FAILURE = True
while self._cleanups:
(func, args, kwargs) = self._cleanups.pop()
return super(SimpleTestCases, self).doCleanups()
if __name__ == "__main__":
result = unittest.main()
执行为
python -m unittest test_cases
并输出:
message from function: setUp
message from function: test_func1::start
message from function: test_func1::end
message from function: doCleanups
message from function: cleanResource
.
message from function: setUp
message from function: test_func2::start
Fmessage from function: doCleanups
message from function: setUp
smessage from function: doCleanups
======================================================================
FAIL: test_func2 (test_cases.SimpleTestCases)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_cases.py", line 30, in test_func2
self.assertTrue(False)
AssertionError: False is not true
----------------------------------------------------------------------
Ran 3 tests in 0.000s
FAILED (failures=1, skipped=1)