目前 App 繼續審核中,鐵人賽倒數 5 天。
開啟今天這個題目,是工作上跟同事討論了 Unit Test 。以工作來說主要面對是來自後端丟過來的資料,所以會拿資料來驗證物件是否如輸出預期的值。有些時候重覆的程式碼很多,所以想要把重覆的程式碼拉出來,可是另一個角度來說,就沒辦法一眼看出這段程式碼的邏輯。
所以就回來檢視目前這個專案寫的 Unit Test 是不是有優化的空間,目前有 3 個 Unit Test
目前就只供讀取 assets 的資料,也只有一個函式,目前暫時看不到麼需要優化的地方。
裡面只有一個函式叫 skyWalkerTest()
,input 可以再拉出這個函式。所以這邊想說改成 @Before
,讓 skyWalkerTest()
裡面的邏輯相較比較單純
@Before
fun setup(){
profile = Gson().fromJson(input, Profile::class.java)
}
@Test
fun skyWalkerTest(){
// determine the data
Assert.assertEquals("Luke Skywalker", profile.name)
Assert.assertEquals("172", profile.height)
Assert.assertEquals("77", profile.weight)
Assert.assertEquals("19BBY", profile.birthYear)
Assert.assertEquals(Gender.MALE, profile.genderType)
}
當初設計的想法是想要驗證,list 裡面的 Profile 所印出的值是不是如預期。現在回頭看其實完全牛頭不馬嘴完全偏題
data class ProfileListResponse (
val count: String,
val next: String?,
val previous: String?,
val results: List<Profile>
)
要驗證是 count, next, previous 和 results,不是 results 下的資料啊。
class ProfileListResponseTest : BaseTest() {
private lateinit var response : ProfileListResponse
@Before
fun setup(){
response = Gson().fromJson(
readJsonFile("profileList"),
ProfileListResponse::class.java
)
}
@Test
fun responseTest(){
Assert.assertEquals("82", response.count)
Assert.assertEquals("http://swapi.dev/api/people/?page=2", response.next)
Assert.assertEquals(null, response.previous)
checkNotNull(response.results)
}
}
回過頭來看看本來在 ProfileListResponse 當中的那些驗證 results 下的資料,當初想要驗證的欄位主要是 gender 以及 films;這個兩欄位在物件上有些邏輯存在,所以需要加以驗證。
原本寫在 ProfileListResponseTest 那些不是白費的,只是移到它應要去的地方去,那就留著明天來看看。