4

私はsimplejson次のように読み、インポートのための別のSOの推奨事項を使用しています:

try:
    import simplejson as json
except ImportError:
    import json

ただし、「json モジュールの 1 つ」が実際にインポートされているかどうかを確認するために単体テストを作成しているときに、私自身の設計である円形の悪夢に悩まされています! /はぁ。

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.failUnlessorを調べると (両方を試しました)、失敗が発生し、テストが停止します ( の代わりにunittest.assertTrueロードするだけで失敗を引き起こしているため、失敗しています)...jsonsimplejson

私の意図した目標は、単体テストでjsonまたはsimplejsonのいずれかがロードされたことを確認することです。これについてどうすればよいですか?

アサーションの前に「真実」を捉え、「True」または「False」のみを渡すことを考えましたが、これはユニットテストの一部であるべきだと思ったからです。 -周り(それは私の意見です、多分あなたは違うと感じます)。たとえば、次のようなことを考えていました (python 風の疑似コード):

_simplejsonLoaded = "simplejson" in sys.modules
_jsonLoaded = "json" in sys.modules

self.assertTrue(_simplejsonLoaded or _jsonLoaded)

(私は正式な単体テストに慣れていないので、ここで何かおかしいと思われる場合はお知らせください)。

その他の情報:

  • 私はPython 2.6を使用しています(仕事上の理由で、変更できません)
  • Windows と Linux
4

2 に答える 2

1

問題は、インポートした特定のライブラリを本当に気にするかどうかです。インポートするときは、シンボルも入力しsimplejson as jsonます。それが本当に重要なことですよね? もちろん、インポートしたライブラリに自分のプログラムに必要なすべてのメソッドとプロパティがあるかどうかを確認できますが、それは別の問題です。したがって、テストの正しい定義は次のとおりではありません。jsonsys.modulesjson

import sys
import my_own_module

class TestSomething(unittest.TestCase):
    def test_json(self):
        self.assertIn('json', sys.modules,
                      "json API not loaded")
于 2015-10-21T14:38:23.530 に答える