Python单元测试:让nose显示失败断言的值

15 投票
3 回答
4710 浏览
提问于 2025-04-16 03:35

有没有办法显示出失败的断言值?现在它只显示了错误的追踪信息和抛出的异常类型,但如果能知道具体是哪些值失败了,那就更实用了。

举个例子:

assert result.file == file
AssertionError

3 个回答

1

还有一种可能性:你可以自己定义一个函数来解决这个问题:

def assert_eq(obt, exp):
    assert obt==exp, "\n*Expected:\n%s\n*Obtained:\n%s" % (exp, obt)

你可以用它来替代 assert

assert_eq ( self.data['SQ'].code, "SQ" )

这样就会返回一个很好的错误信息:

AssertionError

24

你可以运行命令 nosetests -d,这样可以显示在断言中比较失败的对象的值。

6

这段代码的意思是:检查结果的文件名(result.file)是否和我们期望的文件名(file)相同。如果不相同,就会显示一个错误信息,告诉我们实际的文件名和期望的文件名是什么。

所以,才会有一些看起来不太好看的 self.assert<Foo> 方法被引入到 unittest.TestCase 里,而不是使用简单又短的断言。这些 self.assert<Foo> 方法知道如何显示失败时的错误信息。

顺便说一下,我原以为 nose 这个工具能做一些神奇的事情,所以在简单的情况下,

assert a == b

应该能显示出有意义的错误信息。

撰写回答