Python 单元测试/测试夹具测试模块是否已加载

标签 python unit-testing

我正在使用另一个 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 导致失败)...
我的预期目标是我希望我的单元测试确认加载了 json 或 simplejson。我该怎么办?
我曾想过在断言之前捕获“真实性”,然后只传递“真”或“假”,但这对单元测试来说并不合适,因为我认为这应该是单元测试的一部分而不是工作-around(这是我的观点,也许你有不同的感觉)。例如,我曾想过做一些类似(python-esque pseduoish code)的事情:
_simplejsonLoaded = "simplejson" in sys.modules
_jsonLoaded = "json" in sys.modules

self.assertTrue(_simplejsonLoaded or _jsonLoaded)
(我是正式单元测试的新手 - 所以,如果这里看起来很疯狂,请告诉我)。
其他信息:
  • 我使用 Python 2.6(出于工作原因 - 无法更改)
  • Windows 和 Linux
  • 最佳答案

    我认为您不需要 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()
    

    关于Python 单元测试/测试夹具测试模块是否已加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19667736/

    相关文章:

    python - 我们什么时候不需要激活函数?

    python - 如何使用带有 Python 的 Google Drive API 覆盖文件?

    java - 单元测试时在何处处理 NullPointerException(在函数中或构造函数中)

    c# - Rhino 模拟期望

    python - iglob 什么时候评估?

    Python round() 太慢,更快的方法来降低精度?

    unit-testing - 如何在我的 tsconfig.json 中指定多个源文件夹?

    unit-testing - 测试传出 Akka Actor 消息

    java - Junit 测试后的数据库清理

    Python BigQuery API : how to get data asynchronously?