Как выполнить юнит-тест юнит-тест TestCases - PullRequest
3 голосов
/ 29 ноября 2011

У меня есть дочерний элемент unittest.TestCase, который определяет несколько проверок подтверждения для конкретного домена. Я хотел бы запустить несколько юнит-тестов для юнит-тестирования этой функциональности, чтобы контролировать, что все будет работать в будущих обновлениях.

class MyBaseTestCase(unittest.TestCase):
    def setUp(self):
        ...
    def tearDown(self):
        ...
    def run(self, result):
        ...
    def assertSpec(self, condition, message):
        ...

Я хочу создать экземпляр MyBaseTestCase в другом модульном тесте, например:

class TestBase(unittest.TestCase):
    def test_assertSpec(self):
        self.testclass = MyBaseTestCase()
        self.assertRaises(AssertionError, self.testclass.assertSpec, False)

При этом я сталкиваюсь с множеством разных ошибок, поэтому мой вопрос Что является обычной практикой для юнит-тестирования пользовательских функций юнит-теста?

В случае, если это поможет:

$ jython
>>> import sys
>>> sys.version
'2.5.2 (Release_2_5_2:7206, Mar 2 2011, 23:12:06) \n[Java HotSpot(TM) Server VM (Sun Microsystems Inc.)]'

1 Ответ

3 голосов
/ 14 января 2012

Не уверен, что есть что-то специфичное для Jython, которое могло бы сломать это, но я бы сделал что-то вроде этого:

import StringIO
import unittest


# The TestCase subclass to test    
class MyBaseTestCase(unittest.TestCase):
    def assertSpec(self, thing):
        assert thing == 123


# The testcase for MyBaseTestCase
class TestMyTest(unittest.TestCase):
    def test_assetSpec(self):
        """Ensure assertSpec works
        """

        class _TestSpec(MyBaseTestCase):
            def test_failure_case(self):
                 self.assertSpec(121)
            def test_success_case(self):
                 self.assertSpec(123)

        # Load tests from _TestSpec
        loader = unittest.TestLoader()
        suite = loader.loadTestsFromTestCase(_TestSpec)

        # Create runner, and run _TestSpec
        io = StringIO.StringIO()
        runner = unittest.TextTestRunner(stream = io)
        results = runner.run(suite)

        # Should be one failed test, and one passed test
        self.assertEquals(results.testsRun, 2)
        self.assertEquals(len(results.failures), 1)

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