Python的内置unittest模块使用TestCase.assert*
方法进行断言:
class FooTest(TestCase):
def test_foo(self):
self.assertEqual(1,1)
self.assertNotEqual(1,2)
self.assertTrue(True)
我通常使用nose或py.test等testrunner,它允许在进行断言时使用内置的assert
关键字:
assert 1 == 1
assert 1 != 2
assert True
unittest的TestCase.assert*
方法的动机是什么?使用内置的assert关键字断言的优点和缺点是什么?有没有理由说为什么单元测试的语法应该受到青睐?
答案 0 :(得分:24)
assert
关键字的问题在于,当Python以'优化'模式运行时(使用-O
参数,或者忽略)设置PYTHONOPTIMIZE
环境变量。)如果要使用assert
测试,则无法使用-O
进行测试。
此外,断言方法的使用使得报告实际涉及的值是多么微不足道,而不必深入挖掘堆栈和源并弄清楚它们应该是什么(我相信,技术nose
和py.test
用于此。)
答案 1 :(得分:4)
答案 2 :(得分:0)
这种方法的主要优点是提供了一些通常执行的内置测试,因此不必一次又一次地编写它们。此外,assertRaises允许您通过抛出异常来自定义断言的确切行为。