【发布时间】:2015-07-15 13:12:25
【问题描述】:
我是 Python 新手。我正在尝试了解发现选项 python unittest 模块。我编写了两个测试脚本,其中包含相同的测试(复制相同的文件,以测试发现选项),其内容如下:。
testFirst.py
import unittest
class Test(unittest.TestCase):
def testFailure(self):
self.assertFalse(True)
def testError(self):
0 / 0
def testPass(self):
self.assertTrue(True)
import sys
sys.argv.append("-v")
unittest.main()
testSecond.py
import unittest
class Test(unittest.TestCase):
def testFailure(self):
self.assertFalse(True)
def testError(self):
0 / 0
def testPass(self):
self.assertTrue(True)
import sys
sys.argv.append("-v")
unittest.main()
输出
现在,当我从命令提示符运行“python -m unittest discover”命令时,我得到以下输出:
testError (testFirst.Test) ... ERROR
testFailure (testFirst.Test) ... FAIL
testPass (testFirst.Test) ... ok
testError (testSecond.Test) ... ERROR
testFailure (testSecond.Test) ... FAIL
testPass (testSecond.Test) ... ok
======================================================================
ERROR: testError (testFirst.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "testFirst.py", line 21, in testError
0 / 0
ZeroDivisionError: integer division or modulo by zero
======================================================================
ERROR: testError (testSecond.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "testSecond.py", line 21, in testError
0 / 0
ZeroDivisionError: integer division or modulo by zero
======================================================================
FAIL: testFailure (testFirst.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "testFirst.py", line 18, in testFailure
self.assertFalse(True)
AssertionError: True is not false
======================================================================
FAIL: testFailure (testSecond.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "testSecond.py", line 18, in testFailure
self.assertFalse(True)
AssertionError: True is not false
----------------------------------------------------------------------
Ran 6 tests in 0.000s
FAILED (failures=2, errors=2)
testError (testFirst.Test) ... ERROR
testFailure (testFirst.Test) ... FAIL
testPass (testFirst.Test) ... ok
testSecond (unittest.loader.ModuleImportFailure) ... ERROR
======================================================================
ERROR: testError (testFirst.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "testFirst.py", line 21, in testError
0 / 0
ZeroDivisionError: integer division or modulo by zero
======================================================================
ERROR: testSecond (unittest.loader.ModuleImportFailure)
----------------------------------------------------------------------
ImportError: Failed to import test module: testSecond
Traceback (most recent call last):
File "C:\Python27\lib\unittest\loader.py", line 254, in _find_tests
module = self._get_module_from_name(name)
File "C:\Python27\lib\unittest\loader.py", line 232, in _get_module_from_name
__import__(name)
File "testSecond.py", line 28, in <module>
unittest.main()
File "C:\Python27\lib\unittest\main.py", line 95, in __init__
self.runTests()
File "C:\Python27\lib\unittest\main.py", line 234, in runTests
sys.exit(not self.result.wasSuccessful())
SystemExit: True
======================================================================
FAIL: testFailure (testFirst.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "testFirst.py", line 18, in testFailure
self.assertFalse(True)
AssertionError: True is not false
----------------------------------------------------------------------
Ran 4 tests in 0.000s
FAILED (failures=1, errors=2)
testError (testFirst.Test) ... ERROR
testFailure (testFirst.Test) ... FAIL
testPass (testFirst.Test) ... ok
testError (testSecond.Test) ... ERROR
testFailure (testSecond.Test) ... FAIL
testPass (testSecond.Test) ... ok
======================================================================
ERROR: testError (testFirst.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "testFirst.py", line 21, in testError
0 / 0
ZeroDivisionError: integer division or modulo by zero
======================================================================
ERROR: testError (testSecond.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "testSecond.py", line 21, in testError
0 / 0
ZeroDivisionError: integer division or modulo by zero
======================================================================
FAIL: testFailure (testFirst.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "testFirst.py", line 18, in testFailure
self.assertFalse(True)
AssertionError: True is not false
======================================================================
FAIL: testFailure (testSecond.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "testSecond.py", line 18, in testFailure
self.assertFalse(True)
AssertionError: True is not false
----------------------------------------------------------------------
Ran 6 tests in 0.000s
FAILED (failures=2, errors=2)
testFirst (unittest.loader.ModuleImportFailure) ... ERROR
testError (testSecond.Test) ... ERROR
testFailure (testSecond.Test) ... FAIL
testPass (testSecond.Test) ... ok
======================================================================
ERROR: testFirst (unittest.loader.ModuleImportFailure)
----------------------------------------------------------------------
ImportError: Failed to import test module: testFirst
Traceback (most recent call last):
File "C:\Python27\lib\unittest\loader.py", line 254, in _find_tests
module = self._get_module_from_name(name)
File "C:\Python27\lib\unittest\loader.py", line 232, in _get_module_from_name
__import__(name)
File "testFirst.py", line 28, in <module>
unittest.main()
File "C:\Python27\lib\unittest\main.py", line 95, in __init__
self.runTests()
File "C:\Python27\lib\unittest\main.py", line 234, in runTests
sys.exit(not self.result.wasSuccessful())
SystemExit: True
======================================================================
ERROR: testError (testSecond.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "testSecond.py", line 21, in testError
0 / 0
ZeroDivisionError: integer division or modulo by zero
======================================================================
FAIL: testFailure (testSecond.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "testSecond.py", line 18, in testFailure
self.assertFalse(True)
AssertionError: True is not false
----------------------------------------------------------------------
Ran 4 tests in 0.000s
FAILED (failures=1, errors=2)
EE
======================================================================
ERROR: testFirst (unittest.loader.ModuleImportFailure)
----------------------------------------------------------------------
ImportError: Failed to import test module: testFirst
Traceback (most recent call last):
File "C:\Python27\lib\unittest\loader.py", line 254, in _find_tests
module = self._get_module_from_name(name)
File "C:\Python27\lib\unittest\loader.py", line 232, in _get_module_from_name
__import__(name)
File "testFirst.py", line 28, in <module>
unittest.main()
File "C:\Python27\lib\unittest\main.py", line 95, in __init__
self.runTests()
File "C:\Python27\lib\unittest\main.py", line 234, in runTests
sys.exit(not self.result.wasSuccessful())
SystemExit: True
======================================================================
ERROR: testSecond (unittest.loader.ModuleImportFailure)
----------------------------------------------------------------------
ImportError: Failed to import test module: testSecond
Traceback (most recent call last):
File "C:\Python27\lib\unittest\loader.py", line 254, in _find_tests
module = self._get_module_from_name(name)
File "C:\Python27\lib\unittest\loader.py", line 232, in _get_module_from_name
__import__(name)
File "testSecond.py", line 28, in <module>
unittest.main()
File "C:\Python27\lib\unittest\main.py", line 95, in __init__
self.runTests()
File "C:\Python27\lib\unittest\main.py", line 234, in runTests
sys.exit(not self.result.wasSuccessful())
SystemExit: True
----------------------------------------------------------------------
Ran 2 tests in 0.000s
FAILED (errors=2),
这给人的印象是测试执行了不止一次。为什么会这样?我做错了什么?
【问题讨论】:
-
您在每个模块的末尾调用
unittest.main()。当您使用 discover 时,它会导入两个模块,从而运行其中的代码 → 执行单元测试,然后 unittest discover 调用执行所有单元测试。这就是他们运行两次的原因。 -
但是,为什么我会得到荒谬的测试计数,例如在 0.000 秒内运行 6 次测试,在 0.000 秒内运行 4 次测试,在 0.000 秒内运行 6 次测试,在 0.000 秒内运行 4 次测试,在 0.000 秒内运行 2 次测试0.000 秒。它清楚地表明它正在执行 22 个测试方法,而根据您的评论,即使它执行每个测试用例,总测试执行必须是 12,而不是 22,从哪里执行额外的 10 个方法?
-
下面给出的错误意味着:错误:testSecond (unittest.loader.ModuleImportFailure) ImportError: 无法导入测试模块:testSecond Traceback(最近一次调用):文件“C:\Python27\lib\ unittest\loader.py”,第 254 行,在 _find_tests 模块 = self._get_module_from_name(name) 文件“C:\Python27\lib\unittest\loader.py”,第 232 行,在 _get_module_from_name __import__(name) 文件“testSecond.py ",第 28 行,在
unittest.main() 文件中 "C:\Python27\lib\unittest\main.py",第 234 行,在 runTests sys.exit(not self.result.wasSuccessful()) SystemExit:是的