単体テストで使用するために、スペースを含む引数を適切な辞書オブジェクトに解析するように 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)
私が単体テストを書いているコードには、次の引数が別々に与えられた 2 つのテストがあります。
-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 引数を追加するには、次のようにします。
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')
上記の引数を使用して単独でテストしているスクリプトを実行すると、それらは問題なく受け入れられ、出力は期待どおりになります。
ただし、スペースを含む引数を使用する単体テストを実行すると、次の結果が得られます。
DocoptExit: Usage: myPythonScript [options] <file_1> <file_2>
同じ dict オブジェクト (同じ引数を含む) を必要とする他の単体テストは正常に動作します。
docopt が通常どおりに引数を解析できるようにするには、コードの何を変更すればよいですか?