如何在Python中将字符串放在两行?

时间:2014-10-24 20:33:01

标签: python string

我是Python,PyCharm和Web API测试世界的新手。

我正在尝试测试在Web API中发生错误时显示的错误消息。此错误消息包含两部分,并显示在两个单独的行上。

但不知怎的,我为比较生成的任何字符串定义总是显示在一行上。

这是我尝试的事情之一 - 在两个部分之间创建了一个带有新行\ n的字符串。

    wp_error = 'This page can\'t be saved.\n Some required information is missing.'

    # create new workspace and save it without filling up any information.
    self.test_mycode.click_and_wait(self.workspace_overview.new_workspace_button,
                                     self.new_workspace._save_button_locator)
    self.new_workspace.save_button.click()

    self.message.check_message('error', wp_error)

但这不起作用我得到了:

在check_message中

    Assert.equal(message.message_body.text,message_text)

self = <class 'unittestzero.Assert'>
first = "This page can't be saved.
Some required information is missing."
second = "This page can't be saved.\n Some required information is missing."
.....

>       assert first == second, msg
E       AssertionError: None

所以我的问题是如何定义字符串以适当地测试两行上出现的错误消息? 谢谢。

1 个答案:

答案 0 :(得分:1)

如果:

first = """This page can't be saved.
Some required information is missing."""
second = "This page can't be saved.\n Some required information is missing."
assert first == second

失败,那么问题可能是:

first  == "This page can't be saved.\nSome required information is missing."
second == "This page can't be saved.\n Some required information is missing."

即。在换行符后的第二个空格中有一个额外的空格。 (还要注意三引号,以允许字符串在没有编译器抱怨的情况下跨越行,)

解决方案:您可以:

  1. 对测试数据要格外小心。

  2. 使用&#34; shim&#34;允许&#34;大致等于&#34;。例如:

    import re
    FOLD_WHITESPACE = re.compile(r'\s+')
    
    def oneline(s):
       return FOLD_WHITESPACE.sub(" ", s)
    
    assert oneline(first) == oneline(second)
    

    我并不认为这种特殊的转换对于所有字符串比较来说都是理想的转换,但它是一个简单的转换,可以满足您对空白(包括换行符)的过度关注。

    类似&#34;几乎等于&#34;或者&#34;变换等于&#34;测试通常是方便的或需要测试字符串和浮点值。

    顺便说一句,如果你正在使用assert的对象调用版本,它可能会被描述为:

    Assert.equal(oneline(message.message_body.text),
                 oneline(message_text))