python unittest - 测试计数错误

时间:2018-01-10 08:39:43

标签: python python-3.x unit-testing python-unittest

我正在为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次测试: enter image description here 我可以认为输出是因为最终我只运行一个测试方法,但我无法解释3测试问题。

我的问题:

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

1 个答案:

答案 0 :(得分:1)

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