[英]Python unittest/test fixture testing if module is loaded
我正在使用另一個SO推薦來導入simplejson
,內容如下:
try:
import simplejson as json
except ImportError:
import json
但是,在編寫單元測試以查看是否實際上已導入“ json模塊之一”時,我陷入了自己設計的循環夢night! /嘆。
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
)...
我的預期目標是我希望我的單元測試確認已加載EITHER json或simplejson。 我該怎么辦?
我曾考慮過在斷言之前捕獲“真實性”,然后僅通過“ True”或“ False”,但這不適用於單元測試,因為我認為這應該是單元測試的一部分,而不是一項工作。周圍(這是我的觀點,也許您有不同的看法)。 例如,我曾考慮過要做類似的事情(python-esque pseduoish代碼):
_simplejsonLoaded = "simplejson" in sys.modules
_jsonLoaded = "json" in sys.modules
self.assertTrue(_simplejsonLoaded or _jsonLoaded)
(我是正式進行單元測試的新手-因此,如果這里有些瘋狂的地方,請告訴我)。
其他信息:
我是
我認為您不需要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()
好吧,問題是您是否真的關心導入的是哪個特定庫。 當您將simplejson as json
導入時,您也將sys.modules
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")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.