How to fail a python unittest in setUpClass?

Question:

I am doing some unittests with python and some pre-test checks in setUpClass. How can I throw a unitestfail within the setUpClass, as the following simple example:

class MyTests(unittest.TestCase):

    @classmethod
    def setUpClass(cls):    
        unittest.TestCase.fail("Test")

    def test1(self):
        pass

if __name__ == '__main__':
    unittest.main()

gives the error TypeError: unbound method fail() must be called with TestCase instance as first argument (got str instance instead).

I understand the error I get as fail is a instance method, and I don’t have an instance of MyClass yet. Using an instance on-the-fly like

unittest.TestCase().fail("Test")

also does not work, as unittest.TestCase itself has no tests. Any ideas how to fail all tests in MyClass, when some condition in setUpClass is not met?

Followup question: Is there a way to see the tests in setUpClass?

Asked By: Alex

||

Answers:

self.fail("test") put into your setUp instance method fails all the tests

I think the easiest way to do this at the class level is to make a class variable so something like:

@classmethod
def setUpClass(cls):
   cls.flag = False

def setUp(self):
   if self.flag:
       self.fail("conditions not met")

Hope this is what you want.

Answered By: Raufio

Using a simple assert should work

assert False, "I mean for this to fail"
Answered By: Greg

I’m not an expert in python but with same problem, I’ve resolved adding cls param:

...
    @classmethod
    def setUpClass(cls):
        cls.fail(cls, "Test") 
...

I think is strange but clearer.

When you pass cls, warning appear (Expected type ‘TestCase’, got ‘Type[MyTests]’ instead) and MyTests inherits from TestCase thus can
ignoring adding: # noinspection PyTypeChecker

Answered By: arkadiont
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.