argv에서 eval()을 호출 한 변수를 할당 한 저품질 코드를 프로토 타입 화하고 있지 않습니다. argv는 외부 파일에서 그 값을 가져 왔습니다. API 키. 놀랍게도 그것은 나쁘게 단위 테스트를 망쳤습니다 (아무도 달리지 않았습니다). 여기 이상한 동작으로 unittest가 깨졌습니다.
내가 범인이라고 믿는 코드 조각입니다 : :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.
그래서 내가 내 스크립트를 테스트 할 값입니다으로 키가 들어있는 변수 중 하나 통과, 다음 역 추적을 생산
[[email protected] 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는 기본적으로 평가 (ANDROID_FILMS_KEY)를 실행하고 올바르게 별도의 스크립트는 setkey 기능을 실행 한 결과이다 CK에 API 키를 할당
문자열 '9b269ac759211de6b3c8b238bd758ccf'로키커는 다음과 같습니다 : 단위 테스트를 받아야하는 메소드를 포함하고있는 클래스에서 CK와 PARAMS를 사용하면 놀랍게도 unittest가 9b269ac759211de6b3c8b238bd758ccf를 문자열로 간주하지 않는다고 말하는 기괴한 예외가 발생합니다.
로컬 변수를 얻기 위해'eval'을 사용하고 있습니까? 'locals() [variable]'는 어떻습니까? – katrielalex
@katrielalex : 질문은 작동하기 위해이 코드를 다시 작성하는 방법이 아니라 사소한 것입니다. "unittest가 eval()을 올바르게 처리 할 수없는 이유"와 비슷합니다. – GSP