2011-11-29 82 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