13

このunittestモジュールでは、テストをスキップする機能が気に入っていますが、Python2.7以降でのみ使用できます。

たとえば、次のことを考慮してtest.pyください。

import unittest
try:
    import proprietary_module
except ImportError:
    proprietary_module = None

class TestProprietary(unittest.TestCase):
    @unittest.skipIf(proprietary_module is None, "requries proprietary module")
    def test_something_proprietary(self):
        self.assertTrue(proprietary_module is not None)

if __name__ == '__main__':
    unittest.main()

以前のバージョンのPythonでテストを実行しようとすると、エラーが発生します。

Traceback (most recent call last):
  File "test.py", line 7, in <module>
    class TestProprietary(unittest.TestCase):
  File "test.py", line 8, in TestProprietary
    @unittest.skipIf(proprietary_module is None, "requries proprietary module")
AttributeError: 'module' object has no attribute 'skipIf'

古いバージョンのPythonを「だまして」、単体テストのデコレータを無視し、テストをスキップする方法はありますか?

4

3 に答える 3

6

unittest2は、Python2.7のunittestテストフレームワークに追加された新機能のバックポートです。Python2.4-2.7で実行することがテストされています。

unittestの代わりにunittest2を使用するには、importunittestをimportunittest2に置き換えるだけです。

参照:http://pypi.python.org/pypi/unittest2

于 2012-06-12T06:09:27.690 に答える
5

一般的にはunittest、実際にはpythonic APIがないため、使用しないことをお勧めします。

Pythonでテストするための優れたフレームワークはですnoseSkipTest次に、例外を発生させることでテストをスキップできます。

if (sys.version_info < (2, 6, 0)):
    from nose.plugins.skip import SkipTest
    raise SkipTest

これはPython2.3以降で機能します

鼻にはもっとたくさんの機能があります:

  • クラスは必要ありません。関数もテストになる可能性があります。
  • フィクスチャのデコレータ(セットアップ、分解機能)。
  • モジュールレベルのフィクスチャ。
  • 例外を予期するためのデコレータ。
  • ..。
于 2012-06-12T08:02:44.080 に答える
2

ifステートメントを使用するのはどうですか?

if proprietary_module is None:   
    print "Skipping test since it requires proprietary module"
else:
    def test_something_proprietary(self):
        self.assertTrue(proprietary_module is not None)
于 2012-06-12T06:02:32.843 に答える