Pytest报告测试跳过unittest.skip传递

时间:2017-02-21 15:23:08

标签: python pytest python-unittest

测试看起来像这样:

import unittest

class FooTestCase(unittest.TestCase):

    @unittest.skip
    def test_bar(self):
        self.assertIsNone('not none')

使用pytest运行时,报告如下所示:

path/to/my/tests/test.py::FooTestCase::test_bar <- ../../../../../usr/lib/python3.5/unittest/case.py PASSED

另一方面,如果我将@unittest.skip替换为@pytest.mark.skip,则会将其正确报告为已跳过:

path/to/my/tests/test.py::FooTestCase::test_bar <- ../../../../../usr/lib/python3.5/unittest/case.py SKIPPED

如果有人可以说,我做错了什么,或者是pytest中的错误?

1 个答案:

答案 0 :(得分:3)

unittest.skip()装饰器需要一个参数:   @ unittest.skip(理由)      无条件地跳过装饰测试。理由应该说明原因   测试被跳过了。 它的用法可以在他们的例子中找到: class MyTestCase(unittest.TestCase):     @ unittest.skip(“演示跳过”)     def test_nothing(self):         self.fail(“不应该发生”) 因此unittest.skip本身不是一个装饰器,而是一个装饰工厂 - 实际装饰器是通过调用unittest.skip获得的。 这解释了为什么您的测试通过而不是被跳过或失败,因为它实际上等同于以下内容: 进口单位测试 class FooTestCase(unittest.TestCase):     def test_bar(self):         self.assertIsNone('not none')     test_bar = unittest.skip(test_bar)     #now test_bar成为一个装饰者,而是被调用     #pytest好像是一个单位测试方法并且通过了