2013-08-29 51 views
0

我有我希望成爲一個非常普遍的問題。我正在測試XML文件並驗證特定的標籤。我不想重寫每個字段的代碼,所以我試圖重用標籤檢查代碼。但是,當我嘗試這樣做時如何重用python測試用例類

這裏是我嘗試使用UnitTest框架的「ValidateField」類。這是我正在嘗試使用的代碼。我只是試圖按以下方式調用它。我得到的是單元測試框架運行0次測試。我在我的程序的其他地方成功地使用了單元測試框架,我沒有試圖重用一個類。任何人現在都會誤入歧途?

這裏是輸出我得到:

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

OK 

---------------------------------------------------------------------- 

這裏是類/方法我在哪裏是可重用的類使用使得調用可重用的類

import Common.ValidateField 


class Tests(): 
    def test_testCreated(self): 
     validate = Common.ValidateField.ValidateField() 
     validate.test_field('./created') 

這裏單元測試框架。

import unittest 
import Main 
import Common.Logger 


class ValidateField(unittest.TestCase): 
    def test_field(self, xpath): 
     driver = Main.ValidateDriver().driver 
     logger = Common.Logger.Logger 
     tag = [] 

    for t in driver.findall("'" + xpath + "'"): 
     tag.append(t) 

    # Test to see if there is more than one tag. 
    if len(tag) > 1: 
     self.assertTrue(False, logger.failed("There is more than one " + "'" + t.text + "'" + " tag.")) 
    else: 
     # Test for a missing tag. 
     if len(tag) <= 0: 
      self.assertTrue(False, logger.failed("There is no " + "'" + t.text + "'" + " tag.")) 
      # Found the correct number of tags. 
     self.assertTrue(True, logger.passed("There is only one " + "'" + t.text + "'" + " tag.")) 

    # Test to make sure there is actually something in the tag. 
    if t.text is None: 
     self.assertTrue(False, logger.failed("There is a " + "'" + t.text + "'" + " tag, but no value exists")) 
+0

你是如何運行的(或者,在這種情況下......沒有運行)測試? – geoffspear

回答

0

您正在使用的「可重複使用的類」,其中不從unittest.TestCase繼承,所以不會被測試亞軍被拾起的類。相反,你有「可重用類」本身繼承。

一個可能的解決方案是讓您的主類成爲可重用類的子類,然後通過self參考常用方法。當然,你必須給這個方法一個不同的名字,就好像它的前綴是test_那麼跑步者會認爲這是一個測試本身,而不是,並且試圖運行它。所以:

from common import ValidateField 

class Tests(ValidateField): 
    def test_testCreated(self): 
     self.field_test('./created') 
+0

謝謝丹尼爾。本來我是從unittest.TestCase繼承的,我試圖使用「可重用類」。但是,每次我嘗試這樣做時,我都無法加載測試,並得到以下錯誤: – user2643864

+0

Traceback(最近調用最後一次): 文件「C:\ Users \ sharmon \ PycharmProjects \ DriverValidator \ Tests \ TestCreated.py「,第7行,在test_testCreated中 return validate.ValidateField()。test_field('./ created') 文件」C:\ Python27 \ lib \ unittest \ case.py「,第191行,在__init__中 ( self .__ class__,methodName)) ValueError:在中沒有這樣的測試方法:runTest --------------------- ------------------------------------------------- 在1中運行1次測試。001s FAILED(errors = 1) – user2643864

+0

然後,我想我會從你說的「可重用類」繼承它,但後來我得到以下錯誤。請讓我知道我是否可以提供更多信息。 從公共進口ValidateField 類測試(ValidateField): 高清create_test(個體經營): 驗證= self.ValidateField() validate.field_test(」 ./創建 ') – user2643864

0

看起來你的縮進有問題嗎?查看test_field方法的定義,似乎只有前三個語句被正確縮進並且在測試方法的定義範圍內。其餘的代碼在test_function的主體之外,因此沒有任何內容會被聲明。

這可能是你看到跑0測試的原因 - 因爲在test_field函數中沒有什麼可以測試的。

更正縮進以確保所有其餘代碼也出現在test_function的定義下。希望它能工作,否則我們會再看一次。

+0

感謝普拉哈拉德。當我將代碼粘貼到此論壇中時,縮進不顯示正確。但是,它在定義下正確縮進。 – user2643864

相關問題