blog

Androidユニットテスト

ユニットテストとは何ですか?Javaプログラムの最小の機能単位はメソッドなので、Javaプログラムのユニットテストは単一のJavaメソッドのテストです。 ユニットテストの利点は何ですか?ユニット...

Sep 5, 2020 · 3 min. read
シェア

ユニットテストとは何ですか?Javaプログラムの最小の機能単位はメソッドなので、Javaプログラムのユニットテストは単一のJavaメソッドのテストです。

ユニットテストの利点とは?ユニットテストについて学ぶ前に、TDD(テスト駆動開発)について学ぶことができます。テスト駆動開発とは、まずインターフェイスを書き、すぐにテストを書くということです。テストが書かれた後、実際に実装コードを書き始めます。実装コードを書く過程で、書きながら、テストしながら、すべてのテストが通ったら、それは実装が完了したことを意味します。もちろん、これは理想的な状態です。ほとんどの場合、実装コードはすでに書かれており、既存のコードをテストする必要があります。

AndroidSDKの場合、コアとなる機能メソッドだけでなく、外部インターフェイスも含めたユニットテストのカバレッジが必要です。

I. 単体テストカバレッジの定量的基準

1.ロウカバレッジ

2.ジャッジメント・カバレッジ

3.条件付きカバレッジ

4.パスカバレッジ

ツールの選択: JUnit+PowerMockit

JUnitは唯一のメソッドをモックすることができ、インスタンスをモックすることはできません。そして、JUnitは、動作環境を提供するために、ローカルのJVMを使用して、テストのユニットは、Androidのコンテキスト、SPクラスのメソッドの一部の使用など、Androidフレームワークに依存している場合、ローカルのJVMは、そのような環境を提供することはできませんので、一般的に他のオープンソースのライブラリと組み合わせて、共通のユニットテストを完了します。

Androidの一般的に使用されるユニットテストのオープンソースライブラリは、一般的にMockitoシミュレーションフレームワークです。しかし、Mockitoはパブリックメソッドしかシミュレートできないので、ほとんどの標準的なユニットテストのケースに適用できます。

PowerMockitoとMockitoは、一般的に、外部の、あまり簡単に構築できない環境をモックするのに便利な点では同じですが、PowerMokitoは、より複雑な状況を解決するために使用することができます; PowerMockitoは、private/final/staticメソッドをモックすることができます。Mockitoとも互換性があります。

よく使われるメソッド

第四に、ユニットテストの例

V. IDEAの設定と使い方

VI. カバレッジテストとレポート作成

その他

@EnabledOnOs(OS.WINDOWS) // Windowsシステムでのみテストを実行する。
@DisabledOnOs(OS.WINDOWS) // Windowsではテストが実行されない
@DisabledOnJre(JRE.JAVA_8) // Java 9以降でのみ実行可能なテスト
@EnabledIfSystemProperty(named = "os.arch", matches = ".*64.*") // 64ビット・オペレーティング・システムでのみ実行できるテスト
@EnabledIfEnvironmentVariable(named = "DEBUG", matches = "true") // Debug = trueテストを実行するとき

パラメトリックテスト:

@ParameterizedTest
@MethodSource
void testCapitalize(String input, String result) {
 assertEquals(result, StringUtils.capitalize(input));
}
static List<Arguments> testCapitalize() {
 return List.of( // arguments:
 Arguments.arguments("abc", "Abc"), //
 Arguments.arguments("APPLE", "Apple"), //
 Arguments.arguments("gooD", "Good"));
}

MethodSourceアノテーションはテストされるメソッドに付けられ、デフォルトではテスト用の同名のスタティック・メソッドに対応します。

テストパラメータを渡す別の方法として、@CsvSource を使う方法があります。この場合、各文字列は 1 行を表し、1 行には , で区切られた複数のパラメータが含まれます:

@ParameterizedTest
@CsvSource({ "abc, Abc", "APPLE, Apple", "gooD, Good" })
void testCapitalize(String input, String result) {
 assertEquals(result, StringUtils.capitalize(input));
}

テスト入力が何百もある場合、@CsvSource を直接書くのは不便です。この時、テストデータを別のCSVファイルに記述し、@CsvFileSourceとすることができます:

@ParameterizedTest
@CsvFileSource(resources = { "/test-capitalize.csv" })
void testCapitalizeUsingCsvFile(String input, String result) {
 assertEquals(result, StringUtils.capitalize(input));
}

JUnitはクラスパスで指定されたCSVファイルしか探さないので、testディレクトリにtest-capitalize.csvというファイルを以下の内容で配置します:

apple, Apple
HELLO, Hello
JUnit, Junit
reSource, Resource
Read next

JavaScriptを使ってデータ・サービスを構築するオラクルのオープンソースAvatarプロジェクト

AvatarはHTML5開発のためのフレームワークで、RESTやServer-Sentイベントのサポートに重点を置いたサービスレイヤーと、ほとんど知識を必要としないリッチなクライアントフレームワークを提供します。

Sep 5, 2020 · 1 min read

vscodeの問題点

Sep 4, 2020 · 1 min read

Reactラーニング - React放浪記

Sep 4, 2020 · 31 min read

コアHTTPの問題

Sep 4, 2020 · 12 min read