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 次测试问题。
我的问题:
- 对上述行为的解释是什么?
- 如何让我的单元测试程序显示 2 次测试(不是 1 次或 3 次)的结果?
我来这里谷歌搜索类似的问题,可以回答你的第一个问题:
PyCharm 将每个测试方法(此处 test_1
)和每个子测试计为一个测试。您有一种测试方法,它执行两个子测试(对于 7
和 8
),因此 PyCharm 显示总共 3 个测试。
我正在为 MOOC 编写测试环境,我有以下单元测试 class,它检查名为 search
的方法的输出。这个想法是使用 subTest
.
这是我的代码:
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 项测试:
我的问题:
- 对上述行为的解释是什么?
- 如何让我的单元测试程序显示 2 次测试(不是 1 次或 3 次)的结果?
我来这里谷歌搜索类似的问题,可以回答你的第一个问题:
PyCharm 将每个测试方法(此处 test_1
)和每个子测试计为一个测试。您有一种测试方法,它执行两个子测试(对于 7
和 8
),因此 PyCharm 显示总共 3 个测试。