ValueError: no such test method in : runTest

The confusion with “runTest” is mostly based on the fact that this works:

class MyTest(unittest.TestCase):
    def test_001(self):
        print "ok"

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

So there is no “runTest” in that class and all of the test-functions are being called. However if you look at the base class “TestCase” (lib/python/unittest/case.py) then you will find that it has an argument “methodName” that defaults to “runTest” but it does NOT have a default implementation of “def runTest”

class TestCase:
    def __init__(self, methodName="runTest"):

The reason that unittest.main works fine is based on the fact that it does not need “runTest” – you can mimic the behaviour by creating a TestCase-subclass instance for all methods that you have in your subclass – just provide the name as the first argument:

class MyTest(unittest.TestCase):
    def test_001(self):
        print "ok"

if __name__ == "__main__":
    suite = unittest.TestSuite()
    for method in dir(MyTest):
       if method.startswith("test"):
          suite.addTest(MyTest(method))
    unittest.TextTestRunner().run(suite)

Leave a Comment