2013-12-08 115 views
1

我想爲我的主文件calc.py編寫測試,在模塊文件中使用unittest,MyTests.py在模塊中編寫單元測試的正確方法是什麼?

這裏是我主要的Python文件,calc.py

import myTests 

def first(x): 
    return x**2 

def second(x): 
    return x**3 

def main(): 
    one = first(5) 
    two = second(5) 

if __name__ == "__main__": 
    main() 
    try: 
     myTests.unittest.main() 
    except SystemExit: 
     pass 

這裏是我的MyTests.py文件:

import unittest 
import calc 

class TestSequenceFunctions(unittest.TestCase): 
    def setUp(self): 
     self.testInput = 10 

    def test_first(self): 
     output = calc.first(self.testInput) 
     correct = 100 
     assert(output == correct) 

    def test_second(self): 
     output = calc.second(self.testInput) 
     correct = 1000 
     assert(output == correct) 

運行我calc.py,我得到下面的輸出:

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

OK 

爲什麼unittest打印我「Ran 測試「?
什麼是在模塊中編寫unittest的正確方法?

回答

3

unittests.main()在當前模塊中尋找TestCase實例。你的模塊沒有這樣的測試用例;它只有一個myTests全局。

最佳做法是運行測試自己。有添加__main__部分到myTests.py文件:

import unittest 
import calc 

class TestSequenceFunctions(unittest.TestCase): 
    def setUp(self): 
     self.testInput = 10 

    def test_first(self): 
     output = calc.first(self.testInput) 
     correct = 100 
     assert(output == correct) 

    def test_second(self): 
     output = calc.second(self.testInput) 
     correct = 1000 
     assert(output == correct) 

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

和運行python myTests.py代替。

或者,將導入的myTests模塊傳入unittest.main()。您可能需要將import myTests向下移動__main__,因爲您也有循環導入。在你的情況下,這很好,myTests不使用calc以外的任何全局測試用例,但最好明確這一點。

if __name__ == "__main__": 
    main() 
    try: 
     import myTests 
     myTests.unittest.main(myTests) 
    except SystemExit: 
     pass 
相關問題