包含字符串字面值的Doctest

4

我有一个单元测试需要编写,测试的函数接受一个XML字符串作为输入。这是一个doctest,我希望在测试中将XML内联。由于XML是多行的,我尝试在doctest中使用字符串文字,但没有成功。以下是简化的测试代码:

def test():
  """
  >>> config = \"\"\"\
  <?xml version="1.0"?>
  <test>
    <data>d1</data>
    <data>d2</data>
  </test>\"\"\"
  """

if __name__ == "__main__":
  import doctest
doctest.testmod(name='test')

我收到的错误信息是:
File "<doctest test.test[0]>", line 1
         config = """  <?xml version="1.0"?>
                                            ^
     SyntaxError: EOF while scanning triple-quoted string

我尝试了许多组合,但似乎无法使其正常工作。要么是这个错误,要么是“不一致的前导空格”错误。有什么建议吗?我正在使用Python 2.4(不,没有升级的可能性)。


3
你尝试过加入交互式 shell 使用的 ... 续行提示符吗? - Thomas K
1
我没有Python2.4进行测试,但是在内部使用三个撇号'''来避免"位并添加"... "前缀对我有效。 - DSM
你有一个可行的例子吗?我还不太明白你是怎么做的。我尝试过几次使用“…”和''',但都没有成功。 - shadowland
@DSM,啊,我想通了。我发布了一个答案,但如果你发布相同的内容,我会将其标记为答案,这样你就可以得到积分。 - shadowland
@shadowland:不用了!直接接受你自己的答案就好了。 - DSM
1个回答

15

这段代码可以运行,比如在Python 2.7.12和3.5.2上:

def test():
  """
  >>> config = '''<?xml version="1.0"?>
  ... <test>
  ...   <data>d1</data>
  ...   <data>d2</data>
  ... </test>'''
  >>> print(config)
  <?xml version="1.0"?>
  <test>
    <data>d1</data>
    <data>d2</data>
  </test>

  """

if __name__ == "__main__":
  import doctest
doctest.testmod(name='test')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接