tadasajon
tadasajon

Reputation: 14846

Python unittest - ValueError: no such test method in <class 'mytestcase.MyTestCase'>: runTest

I have a very simple setup that uses unittest and I am getting an error that I don't understand.

# mytestcase.py
import unittest

class MyTestCase(unittest.TestCase):
    def test_one(self):
        self.assertTrue(True)
    def test_two(self):
        self.assertTrue(False)


def initialize():
    return MyTestCase()

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

If I execute the above file, I get the following result, which I expect and understand:

> python mytestcase.py
.F
======================================================================
FAIL: test_two (__main__.MyTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "mytestcase.py", line 7, in test_two
    self.assertTrue(False)
AssertionError: False is not true

----------------------------------------------------------------------
Ran 2 tests in 0.000s

FAILED (failures=1)

But I want to run these tests another way, from my_test_manager.py:

# my_test_manager.py
import mytestcase

test_case = mytestcase.initialize()
test_suite = unittest.TestLoader().loadTestsFromTestCase(test_case)
test_suite_result = unittest.TestResult()
test_suite.run(test_suite_result)
for err in test_suite_result.errors:
    print err
for fail in test_suite_result.failures:
    print fail

But if I try to run this file, it crashes as follows:

> python my_test_manager.py 
Traceback (most recent call last):
  File "my_test_manager.py", line 3, in <module>
    test_case = mytestcase.initialize()
  File "/Users/Jon/dev/test-tools/practice/mytestcase.py", line 11, in initialize
    return MyTestCase()
  File "/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py", line 191, in __init__
    (self.__class__, methodName))
ValueError: no such test method in <class 'mytestcase.MyTestCase'>: runTest

Upvotes: 4

Views: 5908

Answers (2)

Fazlur
Fazlur

Reputation: 1

Thanks it works like u suggested.

from mytestcase import MyTestCase
import unittest
test_suite = unittest.TestLoader().loadTestsFromTestCase(MyTestCase)
test_suite_result = unittest.TestResult()
test_suite.run(test_suite_result)
for err in test_suite_result.errors:
    print("hello")
for fail in test_suite_result.failures:
    print("no hello")

Upvotes: 0

Martijn Pieters
Martijn Pieters

Reputation: 1121654

You do not need to create an instance; return the MyTestCase class itself:

def initialize():
    return MyTestCase

Upvotes: 4

Related Questions