我想知道我們的單元測試代碼是否需要測試副作用。例如,如果我有一個lockItem(BaseItem項目)方法和一個unlockItem(BaseItem項目)方法的鎖定。我們是否應該測試方法只鎖定我們的元素而不是另一個,並且像解鎖一樣?在單元測試中測試副作用
謝謝您的回答
我想知道我們的單元測試代碼是否需要測試副作用。例如,如果我有一個lockItem(BaseItem項目)方法和一個unlockItem(BaseItem項目)方法的鎖定。我們是否應該測試方法只鎖定我們的元素而不是另一個,並且像解鎖一樣?在單元測試中測試副作用
謝謝您的回答
一般而言,您不會測試否定的。含義不要測試代碼不能做什麼,測試它做了什麼。因此,不需要測試方法鎖而不僅僅是它鎖定的元素。如果您試圖走另一條路徑,那就像是說「我有一個素數生成器,我需要測試它不寫入文件系統」。
有一個負面測試的概念是圍繞覈實不應該發生的可怕事情的想法而設計的。 – atk
負面測試在這種情況下確實具有一些價值,因爲您要確保鎖定/解鎖功能選擇正確的元素。過去我曾經遇到過一些令人討厭的錯誤,當我寫的懶惰代碼解鎖了我並沒有真正擁有的東西。 –
所以我建議測試應該測試它確實鎖定了適當的東西,但是爲了測試它沒有獲得對其他任何東西的鎖定,對我來說似乎很奇怪。你是否測試過系統中的任何其他對象都沒有獲得鎖定?每次將新對象添加到系統中時,您都會添加測試嗎? –
通常,目標是測試任何可能出錯的東西。如果您的實現使其他元素可能被錯誤地鎖定,那麼您可能認爲這不值得測試。但是,不可思議的錯誤發生得比您期望的要多。 – DNA
另外,你的功能不應該有副作用。幾乎永遠。 –