2014-04-17 48 views
0

我只是想了解unittest的子類和方法的行爲。在下面的代碼中,我想運行test_add方法而不是test_sub。可有人請向我解釋什麼,我做錯了,因爲輸出證明,正在執行這兩種方法:TextTestRunner在pyunit中運行2個測試(當一個被調用時的test_methods)

import unittest 

def add(a,b): 
    x=a+b 
    return x 

def sub(x,y): 
    z=x-y 
    return z 

class addnum(): 
    def calladd(self, a, b): 
     sum1 = add(a, b) 
     return sum1 
    def callsub(self,x,y): 
     diff = sub(x , y) 
     print "subtraction succ" 
     return diff 

class test(addnum, unittest.TestCase): 
    def setup(self): 
     pass 

    def teardown(self): 
     pass 

    def test_add(self): 
     a1=addnum() 
     if a1.calladd(1, 2) ==3: 
      print "add successful" 
     assert addnum().calladd(1,2) == 3 

    def test_sub(self): 
     assert addnum().callsub(5, 3) == 2 
     print "abc" 

#suite = unittest.TestSuite() 
#suite.addTest(test('test_add')) 
runner = unittest.TextTestRunner(verbosity=2) 
runner.run(test(methodName='test_add')) 

輸出如下:

Finding files... done. 
Importing test modules ... add successful 
done. 

add successful 
subtraction succ 
abc 
---------------------------------------------------------------------- 
Ran 2 tests in 0.000s 

OK 
test_add (trial2.test) ... ok 

---------------------------------------------------------------------- 
Ran 1 test in 0.000s 

OK 

請幫助。我承認我的知識在這一點上相當有限。

回答

1

首先,您不應該將這些行放在模塊末尾。否則,每次導入模塊時,都會運行此測試。你應該換他們是這樣的:

if __name__ == "__main__": 
    #suite = unittest.TestSuite() 
    #suite.addTest(test('test_add')) 
    runner = unittest.TextTestRunner(verbosity=2) 
    runner.run(test(methodName='test_add')) 

這樣一來,你的代碼將只運行在的.py模塊單獨,而不是進口的調用。一旦這樣,似乎工作得很好,只運行所要求的測試。

test_add (__main__.test) ... ok 
add successful 

---------------------------------------------------------------------- 
Ran 1 test in 0.001s 

OK 

總是這樣包裝它,所以如果你忘了刪除你的測試並不重要。

+0

你正在使用哪種python?我知道單元測試模塊在2.7以後有一些不同。這可以解釋爲什麼我們的運行不匹配行爲 – Diegomanas

+0

我已經檢查過,並且在使用TextTestRunner的方式中看不到太多差異。 – Diegomanas

+0

看來Eclipse的PyDev插件只執行一次整個模塊。這就是爲什麼即使不使用if(main),程序也會運行這兩個測試。無論如何感謝指導。爲了方便起見,我切換到NetBeans。 – Kevin

相關問題