web-dev-qa-db-ja.com

Python unittest-モジュールおよびクラスレベルのセットアップ関数で定義された変数をテストで使用する

Nosetestsを使用して Pythonクラスおよびモジュールフィクスチャ をテストするPythonユニットテスト。テスト全体で最小限の設定を行います。

私が直面している問題は、テストでsetupUpModule関数とsetUpClass関数で定義された変数をどのように使用するかわからない(例:-_test_1_)。

これは私が試して使用しているものです:

_import unittest

def setUpModule():
    a = "Setup Module variable"
    print "Setup Module"

def tearDownModule():
    print "Closing Module"

class TrialTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print a #<======
        b = "Setup Class variable"

    @classmethod
    def tearDownClass(cls):
        print "Closing Setup Class"

    def test_1(self):
        print "in test 1"
        print a #<======
        print b #<======

    def test_2(self):
        print "in test 2"

    def test_3(self):
        print "in test 3"

    def test_4(self):
        print "in test 4"

    def test_5(self):
        print "in test 5"

if __name__ == "__main__":
    unittest.main()
_

私が得るエラーは:

_Setup Module
ERROR
Closing Module

======================================================================
ERROR: test suite for <class 'one_setup.TrialTest'>
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/nose/suite.py", line 208, in run
    self.setUp()
  File "/Library/Python/2.7/site-packages/nose/suite.py", line 291, in setUp
    self.setupContext(ancestor)
  File "/Library/Python/2.7/site-packages/nose/suite.py", line 314, in setupContext
    try_run(context, names)
  File "/Library/Python/2.7/site-packages/nose/util.py", line 469, in try_run
    return func()
  File "/Users/patila14/Desktop/experimental short scripts/one_setup.py", line 13, in setUpClass
    print a
NameError: global name 'a' is not defined

----------------------------------------------------------------------
_

もちろん、_gloabl a_および_global b_を実行すれば機能します。もっと良い方法はありますか?

26
Amey

str変数aの場合、唯一の解決策は_global a_です。 Python 2Python のソースコードを見ると、setupModule()は不思議なことをしていないように見えるため、通常のすべての名前空間ルールが適用されます。

aがリストのように可変変数である場合は、グローバルスコープで定義してから、setupModule内に追加できます。

変数bは、クラス内で定義されるため、扱いが簡単です。これを試して:

_@classmethod
def setUpClass(cls):
    cls.b = "Setup Class variable"

def test_1(self):
    print self.b
_
29
nofinator