Python单元测试,结果因print语句而异

时间:2014-12-15 11:15:16

标签: python django unit-testing

我有点困惑。我正在使用python的unittest库测试django应用程序。突然之间,在几分钟内完成100%成功的测试后,突然出现错误。好吧,我想,我必须添加一些愚蠢的语法错误。我开始查看测试,然后是我的代码,然后我尝试打印出与assertEqual进行比较之前比较的结​​果。突然,如果我这样做,测试运行! :○

这是为什么?有谁之前经历过这个吗。我发誓,我做的唯一改变是在我的测试功能中添加一个print语句。我会在

之前和之后发布此功能

之前(失败)

def test_swap_conditionals(self):
    """
    Test conditional template keys
    """
    testStr = "My email is: {?email}"
    swapStr = self.t.swap(testStr)
    # With email
    self.assertEqual(swapStr, "My email is: john@baconfactory.com")

    # Without email
    self.t.template_values = {"phone" : "00458493"}
    swapStr = self.t.swap(testStr)
    self.assertEqual(swapStr, "My email is: ")

之后(成功)

def test_swap_conditionals(self):
    """
    Test conditional template keys
    """
    testStr = "My email is: {?email}"
    swapStr = self.t.swap(testStr)
    print(swapStr) #diff here
    # With email
    self.assertEqual(swapStr, "My email is: john@baconfactory.com")

    # Without email
    self.t.template_values = {"phone" : "00458493"}
    swapStr = self.t.swap(testStr)
    self.assertEqual(swapStr, "My email is: ")

2 个答案:

答案 0 :(得分:1)

看起来有一些外在原因。

您可以查看的内容:

  • 在相同条件下重复测试几次。总是失败还是失败?或者它是一个'鳍状肢?测试?这可能是由时间问题引起的(虽然不太可能)。
  • 将测试放在自己的类中,因此其他单元测试没有副作用。
  • 如果在自己的测试类中的测试通过,原因是副作用:
    • 其他单元测试
    • 启动/拆卸功能

答案 1 :(得分:0)

好吧很尴尬,但这完全是我的错。交换函数正在查找该行上的每个条件模板变量,然后一次在该列表上迭代一个条件模板变量,因此要么错过了它已经拥有的键,要么它很幸运,它碰巧碰到了该键。

实施例

line: "This is my {?email}, and this is my {?phone}"

finds:
[{?email}, {?phone}]

iterates over [{?email}, {?phone}]
1. {?email}
key being compared = phone : '00549684'

它有手机作为钥匙,但它完全无视它并且不会将其换掉,因为 它只是持有{?email}所以它只返回“”。

我真的很抱歉把所有的时间浪费在这里。谢谢你的好答案。我现在正在重构代码,并且肯定会喝咖啡休息时间:D