【问题标题】:Which are the tests that unittest counts in this sample of code?在这个代码示例中,unittest 计算了哪些测试?
【发布时间】:2019-06-07 15:15:52
【问题描述】:

Jupyter Notebook 中的 Python 3.6.7。在 Lubuntu 18.04.2 LTS 中运行, 它本身在 Virtual Box 中运行。

我正在学习使用模块 unittest。 我的理解是每个单独的方法都是一个测试, 这个其他问题或多或少地证实了这一点: Python unittest counting the number of tests

不过,当我运行这段代码时:

import unittest

def square(x):
    return x * x


class TestSquareFunction(unittest.TestCase):

    def test_positive(self):
        a = 2.0
        self.assertEqual(square(a), 4.0)

    def test_negative(self):
        a = -3.0
        self.assertEqual(square(a), 9.0)


if __name__ == '__main__':
    unittest.main(argv=['first-arg-is-ignored'], exit=False)

我得到了结果:

.....
----------------------------------------------------------------------
Ran 5 tests in 0.006s

OK

当我期待 2 次测试时。

如果我更改方法中的值导致测试失败, 我得到了这个结果:

Ran 5 tests in 0.017s

FAILED (failures=2)

失败的测试是方法test_positivetest_negative。 但是,其他测试是什么?

稍后添加

在同一个 Notebook 中还有另一个单元格,包含另一个 TestCase 对象,它有自己的 3 个方法。

【问题讨论】:

  • 当我测试你的代码时,我得到了 2 个测试..
  • 在此处粘贴您的代码:repl.it/languages/python3,看看它是如何完美运行的!
  • 基于TestCase基类方法计数的测试计数!看来你的运行环境有问题!如果您想获得帮助,您必须详细说明您的运行环境以及运行方式!和其他文件(如果可用)在您的项目中!
  • 打开详细程度以查看它实际运行的测试.. 显然您的示例中只定义了 2 个测试。
  • 感谢您的所有 cmets。我发现是问题所在。在同一个笔记本中是另一个单元格,其中包含另一个具有 3 个方法的 TestCase 对象。当我运行包含我在此处发布的代码的单元格时,结果会计算两个 TestCase 对象的方法。如果我重新启动内核并只运行这段代码,我会得到 2 个测试。我将修改问题以反映这一点。

标签: python python-unittest


【解决方案1】:

正如 AbdolHosein 所说,问题出在运行环境中。

同一个 Notebook 包含两个不同的 TestCase 对象,具有不同的方法。当其中一个测试运行时,它会计算之前运行过的所有方法,即使它们包含在另一个对象中。

由于一个对象有 3 个方法,另一个有 2 个方法,所以最终结果是运行了 5 个测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2011-03-12
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多