株式会社ゆめみの Android の採用コーディング試験に挑戦してみました💪
なんで挑戦したの??
Android 開発の技術力を確かめるためです😎
有名IT企業のコーディング試験なので腕試しに良いと思いました😊
また、コーディング試験を体験することで新しい学びがあるだろうと考えました。
期限は?
実際のコーディング試験の期限は1週間とありました。この挑戦の期限を 3月5日(水) 18:00 ~ 3月12日(水) 18:00 (EST) としました。平日は仕事をしているので帰宅後の 3 時間、土日を 8 時間ずつ作業をして計 34 時間の作業時間でした。
どんな試験?
GitHub
のリポジトリを検索するアプリをリファクタリングするものでした。
初級、中級、ボーナス課題に取り組みました。
取り組んだこと
リファクタリングで行ったことを大まかに紹介したいと思います🖊
- 公式推奨のアーキテクチャを取り入れる
- 詳細ページでリポジトリの README を Markdown で表示する
- ユニットテストと E2E テストの実装
公式推奨のアーキテクチャ
Domain
があると DB ライブラリや API クライアントを変更する際は Data レイヤのみ修正すれば良いので後から変更しやすいという点があると感じました。
README を Markdown で表示
Markwonを使用してREADME.md
を DetailFragment で表示する機能を実装しました。
以下のコードで README.md を取得します。もし取得できなかった場合は Place Holder のテキストを表示します。
val url = "https://api.github.com/repos/$fullName/readme"
ユニットテストと E2E テスト
こちらのページを参考にしました。Data レイヤ
のRepository
、 Domain レイヤ
のUseCase
, UI レイヤ
のViewModel
のユニットテストを作成しました。
core-testing
の別モジュールにユニットテストと E2E テストで使用するモックデータを作成しました。
object TestHttpClientProvider {
private val FAKE_RESPONSE_BODY = """
{
"items": [
{
"full_name": "MyTestRepo",
"language": "Kotlin",
"stargazers_count": 42,
"watchers_count": 42,
"forks_count": 10,
"open_issues_count": 5,
"owner": {
"login": "ownerName"
"avatar_url": "https://example.com/avatar.png"
},
"description": "Description"
}
]
}
""".trimIndent()
fun createHttpClient(): HttpClient {
val mockEngine = MockEngine { _ ->
respond(
content = ByteReadChannel(FAKE_RESPONSE_BODY),
status = HttpStatusCode.OK,
headers = headersOf(HttpHeaders.ContentType, "application/json")
)
}
return HttpClient(mockEngine) {
install(ContentNegotiation) {
json(Json { ignoreUnknownKeys = true })
}
}
}
}
学んだこと
UI・Domain・Data の3層構造で実装することにより後から変更がしやすいと感じました。初めて espresso を使用して E2E テストを作成しました。Dagger Hilt を使用することで簡単にモックデータに置き換えることが出来ました。
出来なかったこと
UI を JetpackCompose に変更することが一週間では出来なかった。
最後に
Android の採用コーディング試験を公開してくださった株式会社ゆめみさんありがとうございます🙏