我正在为MOOC编写测试环境,我有以下单元测试类,它检查名为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()
的方法的输出。我们的想法是使用subTest
迭代几个输入(在这种情况下有2个)。
这是我的代码:
test_1
这是奇怪的 - 我有2个测试用例(我在Ran 1 test in 0.001s
OK
Process finished with exit code 0
方法中使用for循环运行。但是,一方面我的控制台输出是:
SELECT
'categories'.'catId',
'categories'.'title',
'categories'.'description',
(
SELECT SUM(hits)
FROM 'links'
WHERE 'catId' = 'categories'.'catId'
) AS 'hits_count'
FROM 'categories'
LEFT JOIN 'links'
ON 'links'.'catId' = 'categories'.'catId'
WHERE 'status'='1'
ORDER BY 'hits_count'
另一方面,pycharm声称我通过了3次测试: 我可以认为输出是因为最终我只运行一个测试方法,但我无法解释3测试问题。
我的问题:
答案 0 :(得分:1)
我是来这里搜索类似问题的,可以回答您的第一个问题:
PyCharm将每种测试方法(此处为test_1
)和每个子测试都计为一项测试。您有一种测试方法,可以执行两个子测试(7
和8
),因此PyCharm总共显示3个测试。