2017-10-12 61 views
0

所以,我有一個函數構造一個巨大的稀疏矩陣。功能的結構是這樣的:如何寫python unittest函數返回巨大的稀疏矩陣

def return_matrix(): 

    for i in range(i_res): 
     for j in range(j_res): 
      if i == 0 and j == 0: 
       # code that adds value to sparse matrix 
      elif (i == 1 and j==1) or (i==i_res-1 and j==j_res-1): 
       # code that adds value to sparse matrix 
      #and so on 

所以這個函數基本上是elif語句的長鏈。

在這種情況下編寫unittest的正確方法是什麼?

+1

每個'elif'都可以調用一個不同的函數來執行它的處理(當前代碼中#s之後的是什麼),然後你的單元測試將對該函數起作用並測試它的行爲:如果有效值,則無效值,最小值/最大值等。 – boardrider

+0

但是我可以在排列elifs中的單行函數時出錯。即雖然我的每個小函數都會通過測試,但我的主要return_matrix函數會產生錯誤的結果。 –

+1

您可以將'elif's更改爲'if's,這會使它們彼此獨立,從而可以減少由於排序錯誤而導致錯誤的機會。 – boardrider

回答

1

試着測試什麼你的代碼在做什麼而不是如何它是這樣做的。您的測試可能不需要擔心代碼中的單個if語句及其順序。相反,請考慮矩陣的哪些特徵是正確的。

我不知道你的要求什麼,所以我就做了一些事情,可能會測試好:每一行中

  • 值單調從左至右增加
  • 奇數列有行內奇數值
  • 沒有重複的值

我能想象編寫測試用例對於這些將通過基質和CH的項目迭代ECK。

很明顯,您必須考慮自己的要求,看看您可以在自動化測試中檢查結果的質量。你怎麼知道結果是錯的?

+0

那麼,檢查我的矩陣是否正確的顯而易見的方法是將其用於我知道答案的問題,並查看我的矩陣是否導致相同的答案。這是我過去一直這樣做的方式。但在我看來,它與單元測試正確的方式無關。 –

+1

是否有一個或兩個其他簡單示例可用於測試相同的矩陣?是否有更小的矩陣可以通過相同的代碼生成並比較容易?你可能會發現這章關於[自動測試的哲學](http://xunitpatterns.com/Philosophy%20Of%20Test%20Automation.html)有幫助。整本書非常好。 –