2012-08-10 244 views
1

我想編寫一個套件測試,我有一個模塊正確運行單元測試,但我打算添加更多模塊並立即測試它們,所以我編碼了以下代碼:Python套件測試不運行測試

#main.py 

import unittest 
from test.Services import TestOS 

if __name__ == '__main__': 
    suite = unittest.TestSuite() 
    suite.addTests(TestOS.TestOS()) 
    unittest.TextTestRunner().run(suite) 

TestOS.py

import unittest 
from app.Services.OS import OS 

class TestOS(unittest.TestCase): 
    os = OS() 
    def setUp(self): 
     pass 
    def tearDown(self): 
     pass 
    def testOSName(self): 
     self.assertEquals(self.os.getPlatform(), 'Windows')  
    def testOSVersion(self): 
     self.assertEquals(self.os.getVersion(), '7') 

if __name__ == "__main__": 
    #import sys;sys.argv = ['', 'Test.testName'] 
    unittest.main() 

它運行後,我得到這樣的輸出:

Finding files... done. 
Importing test modules ... done. 

---------------------------------------------------------------------- 
Ran 0 tests in 0.000s 

OK 

它沒有沒有找到任何測試,我的代碼有什麼問題?

+2

包括在您的文章你的測試代碼。 – 2012-08-10 21:31:42

+0

@BrendenBrown完成! – dextervip 2012-08-10 21:37:27

回答

4

suite.addTest(TestOS.TestOS())僅適用於您的測試用例包含runTest()函數的情況。 否則,您需要一個「TestLoader」來檢測以「test *」開頭的TestOS功能。

#main.py 

import unittest 
from test.Services import TestOS 

if __name__ == '__main__': 
    suite = unittest.TestSuite() 
    tests = unittest.defaultTestLoader.loadTestsFromTestCase(TestOS) 
    suite.addTests(tests) 
    unittest.TextTestRunner().run(suite) 
+0

我改變了我的代碼,但仍然沒有運行測試,你確定它是正確的嗎? – dextervip 2012-08-10 22:22:22

+0

我測試過它,但我沒有完整的代碼。也許你需要unittest.defaultTestLoader.loadTestsFromTestCase(TestOS.TestOS)? – Vortexfive 2012-08-10 22:26:19

+0

奇怪我不能讓它工作。 – dextervip 2012-08-11 02:41:39

0

修改您的設置方法如下

def setUp(self): 
    self.os = OS() 
    pass 
+0

爲什麼這會有所作爲? (唯一的原因是它會產生任何變化,如果爲程序的同一運行實例化多個'TestOS'並且操作系統在這些實例之間實際發生變化,這聽起來難以置信)。 – 2012-08-11 05:59:20