iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 25
0
自我挑戰組

30 天開發 Android App 的流水帳系列 第 25

Day 25:回頭檢視 Unit Test(1/2)

目前 App 繼續審核中,鐵人賽倒數 5 天。

開啟今天這個題目,是工作上跟同事討論了 Unit Test 。以工作來說主要面對是來自後端丟過來的資料,所以會拿資料來驗證物件是否如輸出預期的值。有些時候重覆的程式碼很多,所以想要把重覆的程式碼拉出來,可是另一個角度來說,就沒辦法一眼看出這段程式碼的邏輯。

所以就回來檢視目前這個專案寫的 Unit Test 是不是有優化的空間,目前有 3 個 Unit Test

  • BaseTest
  • ProfileTest:對應 Profile 物件
  • ProfileListResponseTest:對應 ProfileListResponse 物件

BaseTest

目前就只供讀取 assets 的資料,也只有一個函式,目前暫時看不到麼需要優化的地方。

ProfileTest

裡面只有一個函式叫 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)
}

ProfileListResponseTest

當初設計的想法是想要驗證,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;這個兩欄位在物件上有些邏輯存在,所以需要加以驗證。

ProfileTest 擴增

原本寫在 ProfileListResponseTest 那些不是白費的,只是移到它應要去的地方去,那就留著明天來看看。


上一篇
Day 24:App Splash 動畫
下一篇
Day 26:回頭檢視 Unit Test(2/2)
系列文
30 天開發 Android App 的流水帳32

尚未有邦友留言

立即登入留言