首先,單元測試是十分重要的,試想若是沒有單元測試,那麼如何保證代碼可以正常運行呢?測試人員作的只是業務上的集成測試,也就是黑盒測試,對單個的方法是沒有辦法測試的,並且,測試出的 bug 的範圍也會很廣,根本不能肯定 bug 的範圍,還得去花時間來肯定 bug 出在什麼地方。難道這就不浪費時間了嗎?甚至,這樣的方式,時間浪費的會更多。其重要性請看博文論單元測試的重要性java
關於如何寫好單元測試,下面有幾條建議供你們參考:框架
測試數據大體分爲兩種:變化的和不變化的,對於不變的測試數據,咱們徹底能夠寫在單元測試用例代碼中,也能夠將數據外部化。ide
而對於測試數據一直在變,而且測試數據量比較大的時候可使用測試數據外部化將數據放在測試用例的外部進行統一管理。post
什麼是數據外部化?就是將數據放在單元測試用例的外部統一管理,好比咱們能夠將一個單元測試用例中的測試數據統一放在一個CSV文件中。咱們就能夠經過好比junit5中的 參數測試註解@ParameterizedTest
和引入CVS文件的註解@CsvFileSource
並指定其中的resources屬性指定CSV文件, numLinesToSkip = n 屬性指定從第n+1行開始。這樣就能夠經過一個CSV文件統一管理一個單元測試用例中的數據。咱們管理測試用例中所須要的數據就只須要管理一個個CSV文件便可。下面能夠看一個案例:(其中具體的使用方法請看博客junit5系列-參數化測試)單元測試
@ParameterizedTest
@CsvFileSource(resources = "/two-column.csv", numLinesToSkip = 1)
void testWithCsvFileSource(String first, int second) {
assertNotNull(first);
assertNotEquals(0, second);
}
複製代碼
其中,two-column.csv文件內容測試
Country, reference
Sweden, 1
Poland, 2
"United States of America", 3
複製代碼
在能完成測試的基礎上儘可能簡潔代碼,這樣不只使代碼更加好看,還好維護好理解。 想一想一大堆代碼和幾行代碼你更像看哪一個?ui
對於單元測試用例咱們幾乎每開發完一個方法或者修改完一個方法,咱們幾乎都會去運行一遍測試用例,確保沒有影響到其餘模塊的正常運行,因此咱們要儘可能讓你的測試方法「快!」,移除一些和單元測試無關的代碼。固然,前提仍是要保證測試的完整性與正確性。spa
這個相對來講比較簡單,可是作起來是比較難的,由於可能會有多種緣由致使你的測試用例失敗,好比:數據過時、方法內部邏輯改變等。這些可能會花費你的一些時間去修改,你每每可能不肯意,嘿嘿.net
可是若是你不注意這些小錯誤,這可能就會致使你的一個大流程失敗,你們應該知道,咱們在運行一個流程時每每一個小小的錯誤就致使流程整理失敗!
這包含的方面就比較廣了,下面幾個方面我認爲你們應該注意的:
一個設計好的單元測試,其代碼測試覆蓋率也是很高的,並不要求100% 的測試代碼覆蓋率,可是高覆蓋率的代碼包含未檢測到的錯誤的概率要低,由於其更多的源代碼在測試過程當中被執行。
注意:高代碼覆蓋不能保證測試是完美的,因此要當心!
好了,上述就是對如何寫好單元測試的一些建議,僅供參考,若有不當,請在評論區中指出,感激涕零!
若是轉載此博文,請附上本文連接,謝謝合做~ :juejin.im/user/5c3036…
若是感受這篇文章對您有所幫助,請點擊一下「喜歡」或者「關注」博主,您的喜歡和關注將是我前進的最大動力!