Как проникнуть
-
25-10-2019 - |
Вопрос
У меня есть ребенок Unittest. Я хотел бы запустить несколько единомышленников, чтобы возместить эту функцию, чтобы контролировать, что все работает над будущими обновлениями.
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)
Я сталкиваюсь с несколькими разными ошибками, когда делаю это, так что мой вопрос Что является обычной практикой для Unittest Custom Unittest функций?
В случае, если это помогает:
$ 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.)]'
Решение
Не уверен, что есть что -нибудь конкретное 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()
Не связан с StackOverflow