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

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

最佳答案

这只是因为他们复制了 JUnit,后者使用实例方法进行断言。这也是为什么所有内容都以驼峰命名法而不是下划线命名。

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

关于python - 为什么unittest.TestCase中的assert函数必须是成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48143373/

相关文章:

python - 模拟 with 语句中使用的类

python - 最好的记录 python 友好的 GUI 构建器,如 GLADE

python - 如何在 Python 中用零向右填充数字字符串?

python - 编写扩展Python单元测试的自定义fail()方法

python - 单元测试记录结果文件

python - 从setUpClass到setUp的单元测试数据

python - 如何在 Python 中对复制的 MagicMock 调用方法?

python - 欧拉计划 #11 Numpy 方式

python - 使用 CSS 选择器查找某些 <div> 标签时遇到问题

python - 在 pypi 包索引上查找包版本的优雅方法是什么?