【问题标题】:Trailing spaces removed on Python heredoc lines in PyCharm在 PyCharm 中的 Python heredoc 行上删除了尾随空格
【发布时间】:2015-04-26 10:18:16
【问题描述】:

我在 PyCharm 社区 3.4.1 中使用 Python 2.7 和 unittest2。我需要将 CLI 命令的文本输出与字符串的内容进行匹配以进行自动化测试。

此命令的输出经常在行尾有尾随空格;如果我在用于存储预期文本的 heredoc 的行尾添加空格,它们会在编辑器中神秘地被删除并且不会进入文件。为了解决这个问题,我不得不拆分我的heredoc并用空格重新组合它;这很丑陋,但这是我让它工作的唯一方法。

我试过谷歌搜索和搜索解释,但没有找到;我怀疑这可能是 PyCharm 的自动格式化变得混乱,并将其视为一行 Python 代码,可以安全地删除尾随空格。

这是我的代码;它在 unittest2 类中:

def test_help_command(self):
    textgot = run_the_help_command()
    partone = """
blah blaah blah blah blah
This line has a space at the end in the help output"""
    parttwo = """
foo foo foo foo foo
This line also ends with a trailing space in the help output"""
    partthree = """
baz baz baz 
"""
    # Recombine parts with spaces
    helptext = partone + " " + parttwo + " " + partthree
    self.assertMultiLineEqual(helptext, textgot, 'Help text')

欢迎提出以下建议:

  • 如何解决这个问题,这样我就可以使用单个heredoc 字符串而不是拆分?我有更复杂的示例来测试哪些特征大块文本会使这种方法非常烦人
  • 比 heredocs 更好的字符串存储方式
  • 证明这是或不是 PyCharm 错误的方法

【问题讨论】:

    标签: python pycharm multiline heredoc


    【解决方案1】:

    这并不是 PyCharm 中的真正错误;这是其“在保存时去除尾随空格”功能的限制,该功能不区分上下文,并在所有行中去除尾随空格。您可以在设置 | 下将其关闭。编辑 |一般。

    或者,您可以通过用一些特殊标记(“%20”或类似的东西)替换它们来对heredoc字符串中的尾随空格进行编码,并在执行 assertMultilineEqual() 调用之前将它们替换回来。

    另一种选择是在将 CLI 命令的输出与预期输出进行比较之前,简单地去除尾随空格。

    【讨论】:

    • 在我个人看来,任何依赖(完全不可见的)尾随空格正确保存在源文件中的代码都是不可接受的脆弱,我在自己的工作中总是避免这种情况。当然,这是你的决定。
    • 遗憾的是,这是软件测试的基础,空格在我正在测试的程序的输出中,我需要在存储的预期输出中镜像它以验证这一点。无论哪种方式,代码都可以正常工作,但除非字符串匹配,否则测试不会通过,添加模板或调整命令输出会削弱测试,并可能使其他测试人员在未来查看测试时感到困惑。
    猜你喜欢
    • 2013-08-13
    • 2013-06-25
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多