2010-08-09 269 views
7

我可以在Python中的測試類中調用測試方法嗎?例如:python單元測試方法

 

class Test(unittest.TestCase): 
    def setUp(self): 
     #do stuff 

    def test1(self): 
     self.test2() 

    def test2(self): 
     #do stuff 
 

更新:我忘了我的問題的另一半。只有在測試者調用的方法之後才能調用setup或teardown?或者它會在test1進入和從test1調用test2之後被調用?

+1

是的......我想你的問題還有更多,也許你可以詳細說明一下嗎? – Seth 2010-08-09 23:12:22

回答

6

嘗試運行以下代碼:

import unittest 

class Test(unittest.TestCase): 
    def setUp(self): 
     print 'Setting Up' 

    def test1(self): 
     print 'In test1' 
     self.test2() 

    def test2(self): 
     print 'In test2' 

    def tearDown(self): 
     print 'Tearing Down' 

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

而且結果是:

Setting Up 
In test1 
In test2 
Tearing Down 
.Setting Up 
In test2 
Tearing Down 
. 
---------------------------------------------------------------------- 
Ran 2 tests in 0.000s 

OK 

現在你看,setUp被調用的測試方法被調用之前通過單元測試,並tearDown是在通話之後呼叫。

+0

選擇做我應該做的事 – Falmarri 2010-08-10 18:19:34

1

所有以字符串'test'開頭的方法都被認爲是單元測試(即當您撥打unittest.main()時它們會運行)。因此,您可以調用Test類中的方法,但是應該將其命名爲不以字符串'test'開頭的內容,除非您希望它也可以作爲單元測試運行。

0

當然,爲什麼不 - 但是這意味着test2將被調用兩次 - 一次通過test1,然後再次作爲自己的測試,因爲名爲test的所有函數都會被調用。

+0

我認爲答案應該是「技術上是,**但不**」。此外,我認爲他們希望繼承他們的測試案例,而不是授權。 – 2010-08-09 23:13:16

+0

我只是想知道如果這樣做會導致測試類在測試運行的次數上搞砸或只是一些奇怪的東西 – Falmarri 2010-08-09 23:14:20

0

是這兩個:

  • setUp將被調用每個測試
  • test2之間會被調用兩次。

如果您想要在測試中調用某個函數,請忽略前綴test

8

這幾乎是一個不要這樣做。如果要按照特定順序運行測試,請定義runTest方法,並且不要將方法命名爲test...

class Test_Some_Condition(unittest.TestCase): 
def setUp(self): 
    ... 
def runTest(self): 
    step1() 
    step2() 
    step3() 
def tearDown(self): 
    ... 

這將按照一(1)setUp和一(1)tearDown的順序運行這些步驟。沒有神祕感。