为什么unittest.TestCase中的assert函数必须是成员函数?

时间:2018-01-08 02:01:29

标签: python python-unittest

unittest.TestCase中的断言函数是成员函数。这意味着必须通过以下方式调用它们:

self.assertTrue(2 + 2 == 5)

而不是像:

unittest.assertTrue(2 + 2 == 5)

当我想在另一个函数中使用那些断言函数时,我发现它有点不方便,例如:

import unittest

def outside_test(test):
    test.assertTrue(2 + 2 == 5)

class T(unittest.TestCase):
    def test_something(self):
        outside_test(self)

t = T() 
t.test_something()

我必须将self传递给outside_test()才能使用assertTrue()

这些断言函数是否有任何理由成为unittest.TestCase的成员函数?

1 个答案:

答案 0 :(得分:1)

这只是因为他们正在复制JUnit,它使用实例方法进行断言。这也是为什么所有内容都以camelCase而不是under_scores命名的原因。

在Python中使用实例方法没有令人信服的优势;模块级函数可能是一个更方便的接口,而other Python testing frameworks使用assert语句。在Java中,特别是在import static之前,实例方法最方便。