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

Why do assert functions in unittest.TestCase have to be member functions?

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的成员函数吗?

这只是因为他们在复制 JUnit,它使用实例方法进行断言。这也是为什么一切都以驼峰命名而不是 under_scores.

命名的原因

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