【发布时间】:2023-03-09 20:55:01
【问题描述】:
我正在尝试为我的 python 包编写单元测试,但我发现当我运行测试时 AssertionErrors 没有被引发,当它们应该被引发时。这是一个 MWE:
在 exampleModule.py 我有:
#! /usr/bin/env python
import unittest
class UnitTest(unittest.TestCase):
def runTest(self):
print("Starting test...")
a = 4
b = 5
self.assertEqual(a,b)
print("TEST COMPLETE")
return
在 testError.py 我有:
#! /usr/bin/env python
import unittest
class AllTests(unittest.TestCase):
def testExample(self):
from exampleModule import UnitTest
UT = UnitTest()
UT.run()
return
if __name__ == '__main__':
unittest.main()
当我运行 testError.py 时,我希望在 exampleModule.py 中看到 UnitTest 报告的 AssertionError,但是,我只看到以下内容:
> ./testError.py
Starting test...
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
为什么没有引发 AssertionError?如果我将 UnitTest() 类放在 testError.py 中(即,所有内容都在同一个文件中),则会引发 AssertionError。那么为什么当 UnitTest 存储在不同的文件中时不会引发错误呢?
谢谢!
【问题讨论】:
-
谢谢@Gang——那么我在哪里调用assertRaises()?在我的 AllTests 课程中? TestCase.run() 调用是否返回了上下文管理器?如果我理解正确,UnitTest.runTest() 函数中出现的任何错误都会被忽略并简单地存储在上下文管理器中?在我的 UnitTest.runTest() 函数中查询上下文管理器只会创建另一个 AssertionError,它也被“忽略”。
-
用另一个单元测试来测试一个单元测试是没有意义的。
-
@Gang -- 那么我将如何重构我的示例,以便我可以将单个测试存储在模块中,并拥有一个调用所有这些测试并使用 main() 函数运行它们的脚本?
-
你是指
nosetests还是nose2还是pytest,他们会发现并进行测试而不使用__main__?
标签: python unit-testing assert python-unittest