私はプロトタイピングを行っており、argv で eval() を呼び出して値を取得した変数を割り当てた低品質のコードを気にせずに、API キーを含む外部ファイルの値を取得しました。驚いたことに、単体テストがひどくクラッシュしました (どれも実行されませんでした)。
犯人だと思われるコードスニペットは次のとおりです。
from sys import argv
from apikeys import *
def setKey(the_key=DCK):
global CK
CK = the_key # Currently used key
if len(argv) == 1:
print('---Executing script. Enter optional arguments if you wish to use special API keys.---')
setKey()
elif len(argv) > 1:
setKey(eval(argv[1]))
TOKEN = rget(DOMAIN+'signin', params={'key':CK}).json['response']['token']
PARAMS = {'signature':TESTSIG, 'token':TOKEN}
# Rest of the code uses unittests which rely on PARAMS.
したがって、キーを含む変数の 1 つを値として渡し、スクリプトをテストすると、次のトレースバックが生成されます。
[gp@imdev1 dv1/tests]# python 2test_api2.py ANDROID_FILMS_KEY
Traceback (most recent call last):
File "2test_api2.py", line 604, in <module>
unittest.main()
File "/usr/lib/python2.6/site-packages/unittest2/main.py", line 97, in __init__
self.parseArgs(argv)
File "/usr/lib/python2.6/site-packages/unittest2/main.py", line 152, in parseArgs
self.createTests()
File "/usr/lib/python2.6/site-packages/unittest2/main.py", line 161, in createTests
self.module)
File "/usr/lib/python2.6/site-packages/unittest2/loader.py", line 148, in loadTestsFromNames
suites = [self.loadTestsFromName(name, module) for name in names]
File "/usr/lib/python2.6/site-packages/unittest2/loader.py", line 142, in loadTestsFromName
raise TypeError("don't know how to make test from: %s" % obj)
TypeError: don't know how to make test from: 9b269ac759211de6b3c8b238bd758ccf
9b269ac759211de6b3c8b238bd758ccf は、基本的に eval(ANDROID_FILMS_KEY) を実行した結果であり、別のスクリプトで setKey 関数を実行すると、API キーが CK に文字列 '9b269ac759211de6b3c8b238bd758ccf' として正しく割り当てられます。
キッカーは次のとおりです: 単体テストが必要なメソッドを含むクラスで CK と PARAMS が使用されている場合、Python は驚くべきことに、単体テストが 9b269ac759211de6b3c8b238bd758ccf を文字列と見なしていないことを伝える奇妙な例外を発生させますか?