Doctests, которые содержат строковые литералы - PullRequest
3 голосов
/ 21 декабря 2011

У меня есть модульный тест, который я хотел бы написать для функции, которая принимает XML в качестве строки.Это тестовый документ, и я бы хотел, чтобы 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 (и нет, нет возможности для обновления).

1 Ответ

11 голосов
/ 21 декабря 2011

Этот код работает, например, с 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')
...