2013-07-23 2 views
1

단위 테스트에 사용할 적절한 사전 개체에 공백이 포함 된 인수를 구문 분석하는 데 docopt를 가져 오는 데 문제가 있습니다.단위 테스트에서 공백을 포함하는 docopt 구문 분석 인수를 만듭니다.

testargs = [] 

def clear_args(): 
    testargs[:] = [] 
    return 

def add_testfiles(file1='defaultfile1.txt', file2='defaultfile2.txt'): 
    clear_args() 
    testargs.append('--debug') 
    testargs.append(file1) 
    testargs.append(file2) 
    return 

def parse_args(optlist): 
    argstr = ' '.join(optlist) 
    return docopt(downpost.__doc__, argv=argstr) 

별도로 다음 인수를 주어이 개 시험을 가지고 내가 단위 테스트를 작성하고 코드를 : 여기에

내가 현재 docopt 구문 분석에 대한 인수 목록을 구성하기 위해 사용하고 코드입니다

def test_exampleunittest(self): 
    add_testfiles() 
    testargs.append('-t "This is the title I want"') 
    self.args = parse_args(testargs) 
    self.post = myPythonScript.process(self.args) 
    self.assertEqual(self.post['Subject'], 'This is the title I want') 

경우 :

-t <title> # <title> can be any string (with spaces) inside quotation marks 
"A Filename with Spaces.txt" # any filename as long as it's in quotation marks 

는 예를 들어, -t 인수가, 내가 할 것, 추가하려면 내가 말한 인수로 테스트하는 스크립트를 실행합니다. 아무 문제없이 받아 들여지고 예상대로 출력됩니다. 내가 공백이 포함 된 인수를 사용하는 단위 테스트를 실행하면

그러나, 나는 다음과 같은 얻을 : 잘 작동 (동일한 인수를 포함한) 같은 DICT 개체를 필요로

DocoptExit: Usage: myPythonScript [options] <file_1> <file_2> 

다른 단위 테스트를.

docopt가 평소와 같이 인수를 구문 분석하도록하려면 코드에서 어떻게 변경해야합니까?

+0

이것은 docopt의 [Github의 문제 추적기] (https://github.com/docopt/docopt/issues/129)에 다시 게시되어 답변되었습니다. 그냥 @Halst이 여기에 그의 대답을 복사 할 때까지 기다리므로 승인 된 것으로 표시 할 수 있습니다. – Isxek

답변

2

docopt는 argv 매개 변수를 문자열 또는 목록으로 사용합니다.

  • 목록 인 경우 목록의 각 항목을 별도의 인수로 해석합니다.
  • 문자열 인 경우 .split()을 사용하여 문자열을 목록으로 분할합니다. 이렇게하면 모든 공백을 풀 수 있습니다.

테스트가 작동하려면 목록에 문자열을 넣지 말고 argstr = ' '.join(testargs)에 합격해야합니다.

이 혼동은 아마도 문자열을 argv로 전달하는 것이 문서화되지 않았기 때문일 것입니다. 사실 그것은 API의 일부가 아니며 구현 세부 사항입니다. docopt argv이 문자열을 사용한다는 사실에 의존해서는 안됩니다. 이것은 사라질 수도 있습니다. 그러나 docopt는 항상 argv에 대한 목록을 허용합니다.