這幾年愈來愈多團隊重視測試,也慢慢有些團隊能接受開發人員同時撰寫測試程式了。當系統和測試開始成對出現時,測試的命名原則也跟著加到團隊的Coding Convention了嗎?
或許寫測試的方法跟寫一般方法的做法差不多,但其實測試要溝通的東西更多,所以有一些眉角或許可以使用看看。
測試檔的檔名應該和測試的標的物對齊,換句話說,如果待測試的類別名稱為:
** HotelCalifornia/Service/RoomReservation.cpp**
那測試檔的檔名應該是
** HotelCalifornia/Service.UnitTests/RoomReservationTests.cpp **
請注意檔名及目錄名,還有記得加s(因為會有多個測試案例放在同一個檔案裡)。
因為測試的種類很多:單元測試,整合測試,壓力測試,功能測試...等等,所以在目錄名稱上就要標注他的測試種類。當然,如果要放在檔名也是可以的,端看團隊的共識。
因為測試的命名通常都非常的長:下一段會看到。所以測試的命名通常都會用Snake_Case的方法命名,例如
public void GetRoom_Should_Return_Available_Room_Information();
以下的測試我們都以單元測試為主,其他測試都適用。
測試方法的命名有很多種做法,這可以看團隊喜歡的方式,各有各的優點。為了方便說明,假設有一個測試案例,要呼叫方法DepositRoomRental(Tenant tenant, int roomId),假設RoomId不存在要回傳失敗訊息。
那為了寫這個測試,有以下的方法可以使用:
public void Test_DepositRoomRental();
public void DepositRoomRental_With_Nonexistent_Room_Id();
public void DepositRoomRental_Should_Return_Unsuccessful_Message_When_RoomId_Not_Exists();
public void Given_Nonexists_RoomID_When_DepositRoomRental_Then_Will_Return_Fail_Message();
總結一下就是:寫測試案例時,至少要具備以下的資訊:
到今天第十四天,終於有一個比較像英文課的地方了。
原則上,測試案例發生的都是假設條件,在符合條件或不符合條件下會發生某些預期的結果,因此命名的句型會用假設語氣,只是寫法上會把If省略掉。
但寫法上就是條件句而己,所以會用假設語氣的第一條件句:現在簡單式表示將來有可能實現的假設
If + 簡單現在式, S will ~ (單一事件)
這樣就不難理解為什麼BDD會用Will了
但如果用像AssertJ, FluentAssertions,jsassert 這種工具,Should還是在第一條件句下,用來描述因果關係,例如
If it continues to rain this hard for another hour, it should start flooding.
所以在寫測試案例時,記得使用假設語氣來命名測試方法。
你的團隊也有寫測試嗎?怎麼命名的呢?分享一下你的團隊的測試命名原則吧!
參考資料:
7 Popular Unit Test Naming Conventions
第一條件句