我正在使用另一个SO推荐的导入simplejson
的方法,如下所示:
try:
import simplejson as json
except ImportError:
import json
然而,在编写我的单元测试以查看是否已导入“json模块之一”时,我陷入了自己设计的循环噩梦中!/叹气。
class AreAllModulesLoaded(unit.TestCase):
"""Test to make sure all modules are loaded"""
def test_json(self):
try:
self.assertTrue("simplejson" in sys.modules)
except:
try:
self.assertTrue("json" in sys.modules)
except AssertionError:
raise
我原本认为这样做可以起作用,但是经过检查 unittest.failUnless
或者 unittest.assertTrue
(我尝试了两种方法),它会引发失败并停止测试(由于我只加载了 json
而不是 simplejson
,所以测试失败)...
我的目标是希望我的 unittest 可以确认是否已加载了 json 或 simplejson。我应该如何做?
我考虑过在断言之前捕获“真实性”,然后只传递“True”或“False”,但这在单元测试中感觉不太对,因为我认为这应该是 unittest 的一部分,而不是一个变通方法(这是我的看法,也许您有不同的看法)。例如,我曾考虑过这样做(类似 Python 伪代码):
_simplejsonLoaded = "simplejson" in sys.modules
_jsonLoaded = "json" in sys.modules
self.assertTrue(_simplejsonLoaded or _jsonLoaded)
我刚开始接触正式的单元测试,如果这里有什么看起来很奇怪的地方,请告诉我。
其他信息:
- 我使用Python 2.6(因为工作原因,不能更改)
- 在Windows和Linux上运行