Eclipse プラットフォーム、Python 3.3。
グローバル変数と python unittest を使用する際の問題を示すために、以下のコードを作成しました。2 番目の単体テスト (最初の単体テストの直接の繰り返し) の結果が
NameError: global name '_fred' is not defined
2 番目のテストをコメントアウトしてみてください。すべて問題なくパスします。
(注:実際のコードが達成しようとしているものの簡単なダイジェストを例の後に追加しました。問題とはあまり関係がないので、邪魔にならないように願っています)
''' Global Problem
'''
import unittest
_fred = None
def start():
global _fred
if _fred is None:
_fred = 39
_fred += 3
def stop():
global _fred
if _fred is not None:
del _fred
class Test(unittest.TestCase):
def setUp(self):
start()
def tearDown(self):
stop()
def test_running_first_time(self):
assert(_fred == 42)
def test_running_second_time(self):
assert(_fred == 42)
if __name__ == "__main__":
#import sys;sys.argv = ['', 'Test.testName']
unittest.main()
実際のコードでは、_fred は Thread から派生したクラスのインスタンスを参照する変数であり (私が行ったことを参照)、start メソッドで割り当てられます。
_fred = MyThreadClass()
同期キュー用の 2 番目のグローバルがあります。
メソッドは、専用スレッドでキュー アイテムの処理を開始および停止します。'stop' は、アイテムの追加を許可しながら処理を停止します。
スレッドの API では、単一の呼び出しのみを開始できます。したがって、処理を再開するには、Thread の新しいインスタンスが必要です。したがって、の使用
if _fred is None:
と
del _fred
私の第一言語を推測しても賞品はありません