为什么unittest中的断言使用TestCase.assertEqual而不是assert关键字?

时间:2011-06-15 16:37:23

标签: python unit-testing

Python的内置unittest模块使用TestCase.assert*方法进行断言:

class FooTest(TestCase):
    def test_foo(self):
        self.assertEqual(1,1)
        self.assertNotEqual(1,2)
        self.assertTrue(True)

我通常使用nosepy.test等testrunner,它允许在进行断言时使用内置的assert关键字:

assert 1 == 1
assert 1 != 2
assert True

unittest的TestCase.assert*方法的动机是什么?使用内置的assert关键字断言的优点和缺点是什么?有没有理由说为什么单元测试的语法应该受到青睐?

3 个答案:

答案 0 :(得分:24)

assert关键字的问题在于,当Python以'优化'模式运行时(使用-O参数,或者忽略)设置PYTHONOPTIMIZE环境变量。)如果要使用assert测试,则无法使用-O进行测试。

此外,断言方法的使用使得报告实际涉及的值是多么微不足道,而不必深入挖掘堆栈和源并弄清楚它们应该是什么(我相信,技术nosepy.test用于此。)

答案 1 :(得分:4)

我没有看到具体的设计决定。看一下它所说的unittest docs

  

将调用特定于类型的相等函数,以生成更有用的默认错误消息

所以我想说这是一个实施决策,可以帮助产生更有意义的错误等。

答案 2 :(得分:0)

这种方法的主要优点是提供了一些通常执行的内置测试,因此不必一次又一次地编写它们。此外,assertRaises允许您通过抛出异常来自定义断言的确切行为。