2015-08-31 61 views
0

我已閱讀unittest的python文檔,發現它有點混亂。我曾寫有用於測試各種類和方法方法測試文件,沿着線:如何測試unittest中的特定情況?

class test_class_Graph(unittest.TestCase): 
    def __init__(self): 
     test_graph = Graph() 
    def test_method__init__(self): 
     assertEquals(x, y) 
    def test_method_node(self, name): 
     node = test_graph.node(name) 
     assertIsInstance(node, Node) 
     assertEquals(node.name, name) 
class test_class_Node(unittest.TestCase): 
    etc 

我已經創造了一些測試方法與「的if-else」語句,相當於「的if-else」語句在實際的方法中。這是一種測試用例 - 在某些情況下,該方法應該採取單向行動,在其他情況下,我們希望該方法能夠產生不同的結果。

在某些情況下,我不想將可能條件集劃分爲'if-else'語句,我只想測試一些「樣本」以獲取更復雜的方法。例如,如果輸入是特定的「X」,我希望輸出是特定的「Y」。

我在哪裏編寫這樣的特定測試用例?我應該從命令行運行我的測試,在那裏輸入輸入?或者我應該簡單地使用'run'從命令行執行一個測試文件,並以某種方式獲得一系列預選輸入和預期輸出?

+0

您可能需要更詳細地說明您正在嘗試做什麼,但我想我會得到一般想法。 –

+0

使用'setUp',而不是'__init__'(但保持你的'setUp'方法非常簡單,或者完全忽略它們)。 –

回答

0

這聽起來像你有一個很長的程序有很多input()電話和事情。我要做的測試是試着將你的實際程序代碼轉移到函數中,這樣你的main就是打印和輸入,它們將數據發送給函數。這些函數然後返回您打印的數據。然後你可以用輸入來測試這些函數。因此,這將是你的用戶交互代碼:

def main(): 
    x = input('what is your x?') 
    y = input('what is your y?') 
    z = input('And what is your z?') 
    print(process_data(x, y, z)) 

然後你就可以測試你的邏輯是這樣的: 啊,我看,這是使用單元測試。

from mycode import process_data 

class TestDataProcessing(unittest.TestCase): 
    def try_one_thing(self): 
     result = process_data(11, 44, 'Steve') 
     assertEquals(result, 99) 

    def try_another_thing(self): 
     result = process_data(2, 6, 'Alan') 
     assertEquals(result, 12) 

有意義嗎?

+0

那麼,這將是測試代碼的好方法,我同意。但是我想使用unittest有各種各樣的原因。我的問題的核心是我們如何使用單元測試文件 - 我們是否在文件中包含輸入和期望輸出的樣本,還是通過從命令行輸入測試輸入來運行測試? – jukhamil

+0

因爲我讀過如果你運行一個測試用例,它會自動運行所有的測試方法。但是,我不明白如何在沒有餵食的情況下做到這一點。 – jukhamil

+0

這是使用unittest!這正是你如何做到的。您可以添加嘗試不同輸入並將其與預期輸出進行比較的方法。我擴展了這個例子來展示它的樣子。 –

相關問題