0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

(1)Android 網羅的単体テスト編 - 準備(備忘録) 

Last updated at Posted at 2020-07-25

やりたいこと

(1) Android 網羅的単体テスト編(まだちゃんとできてないけど)
(2) 網羅率測定 -> https://qiita.com/halsuguro/items/5bf3f7c8c3c577ac616f
(3) CircleCI統合(作成中)
(4) AppiumでUI部分実装(作成中)

環境

AndroidStudio 4.0.1
macOS Catalina, version 10.15.6, CPU 1.6GHz, Mem 16G

Setup(簡単なアプリを作る)

まずEmpty Activityを作ってみましょう。

まず最初にひっかかりそうなのが、このフォルダー構造。
Screen Shot 2020-07-25 at 16.26.55.png

src/androidTest
src/test

なんやねん、Google曰く
src/androidTest「ディレクトリには、実際のデバイスまたは仮想デバイスで実行するテストを配置します。この種のテストには、統合テストとエンドツーエンド テストに加えて、JVM だけではアプリの機能を検証できない場合のテストがあります。」

src/test「ディレクトリには、単体テストなど、ローカルマシンで実行するテストを配置します。」

ふむふむ、ここではテストスクリプトのメンテナンス性を損なうGUIからのテストはしないので、とりあえずsrc/androidTestは無視して、src/testにスクリプトを追加していく。余談だが、同じページに以下のような図があった。
Screen Shot 2020-07-25 at 16.39.08.png

さらに以下引用
「図 2 に示すテスト ピラミッドは、3 つのテストカテゴリ(小規模、中規模、大規模)について、アプリで扱うべき程度を示しています。
小規模テストは、1 つのクラスごとにアプリの動作を検証する単体テストです。
中規模テストは、モジュール内のスタックレベルでのインタラクション、または関連するモジュール間のインタラクションを検証する統合テストです。
大規模テストは、アプリの複数のモジュールにまたがってユーザーが経験する過程を検証するエンドツーエンド テストです。
小規模テストから大規模テストへとピラミッドの段階が上がるにつれて、各テストの再現性は向上しますが、実行時間と保守およびデバッグの労力が増大します。したがって、統合テストより単体テストを増やし、エンドツーエンド テストより統合テストを増やす必要があります。各カテゴリのテストの割合はアプリのユースケースに応じて異なりますが、一般的には、小規模テスト 70%、中規模テスト 20%、大規模テスト 10% の割合でテストを作成することをおすすめします。」
なかなかいいこと書いてある、小規模テスト、中規模テスト、大規模テストという言い方は気に食わないが。。。

単体テストのセットアップ

ここはちとめんどくさいおまじないがいくつかある、めげずにググりながら進めてほしい。
build.gladleに「classpath "de.mannodermaus.gradle.plugins:android-junit5:1.4.2.0」を追加する

Screen Shot 2020-07-25 at 17.11.20.png

appのbuild.gradleに

androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

を追加する。

Screen Shot 2020-07-25 at 17.15.31.png

単体テストを作る

正しい単体テストは境界値条件を考える必要がある(次章で展開)。
複数の境界値の入れ方をどう考えるかは。「単体テスト」再入門! 開発の現場でバグを確実に洗い出す最適な手法と、テストケースの作り方」
https://employment.en-japan.com/engineerhub/entry/2019/10/03/103000
を参照。ここではまず簡単なコードまずテストしてみる

c = a + b
c = a/b

Screen Shot 2020-07-25 at 17.30.45.png

calにカーソルをあてて、右クリック
Screen Shot 2020-07-26 at 7.13.28.png

Screen Shot 2020-07-26 at 7.03.37.png

上記のような画面がでてくるので、Testing libraryでJUnit5を選択(2020年7月ではJunit 3, 4, 5, Groovy JUnitが選べるがここではあまり、手法については解説しないので、以下を参照していただきたい)。
JUnit4を選択し、といあえずplusのテストだけ作成してみる。

Screen Shot 2020-07-26 at 7.25.24.png

OKを押すといかのようなものが生成される。
Screen Shot 2020-07-26 at 7.30.29.png

とりあえず失敗テストを追加してみる、4 = 1 + 2 ではない。

assertEquals(4, mcalc.plus(1,2),0 );  //Added test code

画面上ではこんな感じ
Screen Shot 2020-07-26 at 7.43.53.png

実行してみる
Screen Shot 2020-07-26 at 7.46.09.png

当然failでかえってくる
Screen Shot 2020-07-26 at 7.50.47.png

assertEquals(3, mcalc.plus(1,2),0 );  //Added test code

正しい結果で定義してみる、当然assertは起こらない、でも"PASS!おめでとう!"とも言ってくれない。次章ではここに分岐コードを加えてcode coverageを測定してみる。

参考

https://www.capa.co.jp/archives/27328 (AndroidStudioでの単体テストが詳細に記述されている)
https://qiita.com/izuki_y/items/d784529c301af2883b85

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?