2011-11-29 80 views
3

我有一个unittest.TestCase子,它定义了几个特定领域的断言检查。 我想运行一些unittests来单元测试这个功能来控制一切工作在未来的更新。如何unittest unittest TestCases

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.)]' 

回答

3

不知道有没有什么具体的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() 
+0

谢谢回答。这听起来很合理。我不会在一段时间内选择最佳(接受),但我认为如果不会有任何其他建议的话。 – Vestel