python unittest - 错误的测试计数

python unittest - wrong test count

我正在为 MOOC 编写测试环境,我有以下单元测试 class,它检查名为 search 的方法的输出。这个想法是使用 subTest.

迭代多个输入(在本例中有 2 个)

这是我的代码:

import unittest
import sys
from io import StringIO
import ex1
import ex1sol

class Ex1TestCase(unittest.TestCase):

    def setUp(self):
        self.orig_stdout = sys.stdout
        self.test_lst = [4, 7, 2, 3, 1]
        self.nums_to_search = [7, 8]

    def tearDown(self):
        sys.stdout = self.orig_stdout

    def test_1(self):
        for n in self.nums_to_search:
            with self.subTest(n=n):
                # get test output
                new_stdout = StringIO()
                sys.stdout = new_stdout
                ex1.search(self.test_lst, n)
                test_output =new_stdout.getvalue().strip()
                # get solution output
                new_stdout = StringIO()
                sys.stdout = new_stdout
                ex1sol.search(self.test_lst, n)
                sol_output = new_stdout.getvalue().strip()
                # compare
                self.assertEqual(test_output, sol_output)


if __name__ == '__main__':
    unittest.main()

奇怪的是 - 我有 2 个测试用例(我 运行 在 test_1 方法中使用 for 循环。但是,一方面我的控制台输出是:

Ran 1 test in 0.001s

OK

Process finished with exit code 0

另一方面,pycharm 声称我通过了 3 项测试: 我可以认为输出是因为最终我 运行 只有一个测试方法,但我无法解释 3 次测试问题。

我的问题:

  1. 对上述行为的解释是什么?
  2. 如何让我的单元测试程序显示 2 次测试(不是 1 次或 3 次)的结果?

我来这里谷歌搜索类似的问题,可以回答你的第一个问题:
PyCharm 将每个测试方法(此处 test_1)和每个子测试计为一个测试。您有一种测试方法,它执行两个子测试(对于 78),因此 PyCharm 显示总共 3 个测试。