2017-02-21 31 views
2

тест выглядит примерно так:сообщает Pytest тест пропуску unittest.skip, как прошел

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?

+2

Похоже, вам нужно вызвать 'unittest.skip'. Попробуйте '@ unittest.skip ()'. – vaultah

ответ

2

unittest.skip() декоратор требует аргумент:

@unittest.skip(reason)

Безоговорочно пропустить декорированный тест. причина следует описать, почему тест пропускается.

Его использование можно найти в их examples:

class MyTestCase(unittest.TestCase): 

    @unittest.skip("demonstrating skipping") 
    def test_nothing(self): 
     self.fail("shouldn't happen") 

Таким образом unittest.skip не декоратор сам по себе, но декоратор завод - фактический декоратор получается в результате вызова unittest.skip ,

Это объясняет, почему ваш тест пройден, вместо того, чтобы быть пропущена или неудачу, так как это фактически эквивалентно следующему:

import unittest 

class FooTestCase(unittest.TestCase): 

    def test_bar(self): 
     self.assertIsNone('not none') 

    test_bar = unittest.skip(test_bar) 
    # now test_bar becomes a decorator but is instead invoked by 
    # pytest as if it were a unittest method and passes