我正在使用另一个SO建议来导入simplejson
,其内容如下:
try:
import simplejson as json
except ImportError:
import json
然而,在编写我的unittest以查看“其中一个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确认已加载了EITHER json或simplejson。我怎么能这样做?
我已经考虑过在断言之前捕获“真实性”,然后只传递“真”或“假”,但这对于单元测试感觉不对,因为我认为这应该是单位测试的一部分而不是而不是解决方法(这是我的意见,也许你感觉不同)。例如,我曾想过做类似(python-esque pseduoish code)的事情:
_simplejsonLoaded = "simplejson" in sys.modules
_jsonLoaded = "json" in sys.modules
self.assertTrue(_simplejsonLoaded or _jsonLoaded)
(我是正式单元测试的新手 - 所以,如果有什么东西看起来很疯狂,请告诉我。)
其他信息:
我是
答案 0 :(得分:0)
我认为你不需要TestCase中的try / except东西
import sys
import unittest
try:
import simplejson as json
except ImportError:
import json
class TestSomething(unittest.TestCase):
def test_json(self):
if ('json' in sys.modules or 'simplejson' in sys.modules):
self.assert_(True, "some kind of json loaded")
else:
self.fail()
if __name__ == "__main__":
unittest.main()
答案 1 :(得分:0)
嗯,问题是你是否真的关心你导入的特定库。当您导入simplejson as json
,然后json
中的sys.modules
符号时,那真的很重要,对吧?当然,您可以检查导入的json
库是否具有您自己的程序所需的所有方法和属性,但这是另一个问题。所以,这不是正确的测试定义:
import sys
import my_own_module
class TestSomething(unittest.TestCase):
def test_json(self):
self.assertIn('json', sys.modules,
"json API not loaded")