Espresso TestingFramework-JUnitの概要
この章では、エスプレッソテストフレームワークが構築されているJavaコミュニティによって開発された人気のあるユニットテストフレームワークであるJUnitの基本を理解しましょう。
JUnitは、Javaアプリケーションのユニットテストの事実上の標準です。単体テストで人気がありますが、計装テストも完全にサポートおよび提供されています。Espressoテストライブラリは、Androidベースのインストルメンテーションテストをサポートするために必要なJUnitクラスを拡張します。
簡単な単体テストを書く
私たちは、Javaクラス、作成してみましょう計算(Computation.java)を、簡単な数学的な操作、書き込み総和と乗算を。次に、JUnitを使用してテストケースを作成し、テストケースを実行してチェックします。
AndroidStudioを起動します。
前の章で作成したHelloWorldAppを開きます。
ファイル、作成Computation.javaをしてアプリ/ srcに/メイン/ javaの/ COM / tutorialspoint / espressosamples /がHelloWorldApp / -および書き込み二つの関数和と乗算下記指定されているように、
package com.tutorialspoint.espressosamples.helloworldapp;
public class Computation {
public Computation() {}
public int Sum(int a, int b) {
return a + b;
}
public int Multiply(int a, int b) {
return a * b;
}
}
app / src / test / java / com / tutorialspoint / espressosamples / helloworldappにファイルComputationUnitTest.javaを作成し、以下に指定されているように、SumおよびMultiply機能をテストするための単体テストケースを記述します
package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ComputationUnitTest {
@Test
public void sum_isCorrect() {
Computation computation = new Computation();
assertEquals(4, computation.Sum(2,2));
}
@Test
public void multiply_isCorrect() {
Computation computation = new Computation();
assertEquals(4, computation.Multiply(2,2));
}
}
-ここでは、二つの新しい用語を使用している@TestとのassertEqualsを。一般に、JUnitはJavaアノテーションを使用して、クラス内のテストケースと、テストケースの実行方法に関する情報を識別します。@TestはそのようなJavaアノテーションの1つであり、特定の関数がjunitテストケースであることを指定します。assertEqualsは、最初の引数(期待値)と2番目の引数(計算値)が等しく同じであることを表明する関数です。JUnitは、さまざまなテストシナリオに対応する多数のアサーションメソッドを提供します。
さて、実行ComputationUnitTestをクラスを右クリックし、[ファイル名を指定して実行呼び出すことにより、Androidのスタジオで「ComputationUnitTest」前の章で説明したようにオプションを選択します。これにより、単体テストケースが実行され、成功が報告されます。
計算ユニットテストの結果は以下のとおりです。
注釈
JUnitフレームワークはアノテーションを広範囲に使用します。重要な注釈のいくつかは次のとおりです-
@Test
@Before
@After
@BeforeClass
@AfterClass
@Rule
@Testアノテーション
@Testは、JUnitフレームワークで非常に重要なアノテーションです。@Testは、通常のメソッドとテストケースメソッドを区別するために使用されます。メソッドが@Testアノテーションで装飾されると、その特定のメソッドはテストケースと見なされ、JUnitRunnerによって実行されます。JUnit Runnerは特別なクラスであり、Javaクラス内で使用可能なJUnitテストケースを見つけて実行するために使用されます。今のところ、Android Studioの組み込みオプションを使用して単体テストを実行しています(これにより、JUnitランナーが実行されます)。サンプルコードは次のとおりです。
package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ComputationUnitTest {
@Test
public void multiply_isCorrect() {
Computation computation = new Computation();
assertEquals(4, computation.Multiply(2,2));
}
}
@前
@Beforeアノテーションは、特定のテストクラスで使用可能なテストメソッドを実行する前に呼び出す必要があるメソッドを参照するために使用されます。このサンプルでは例えば、計算のオブジェクトは、別の方法で作成することができるとの注釈が付け@Beforeそれは両方の前に実行されるようにsum_isCorrectとmultiply_isCorrectテストケース。完全なコードは次のとおりです。
package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ComputationUnitTest {
Computation computation = null;
@Before
public void CreateComputationObject() {
this.computation = new Computation();
}
@Test
public void sum_isCorrect() {
assertEquals(4, this.computation.Sum(2,2));
}
@Test
public void multiply_isCorrect() {
assertEquals(4, this.computation.Multiply(2,2));
}
}
@After
@Afterは@Beforeに似ていますが、@ Afterアノテーションが付けられたメソッドは、各テストケースの実行後に呼び出されるか実行されます。サンプルコードは次のとおりです。
package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ComputationUnitTest {
Computation computation = null;
@Before
public void CreateComputationObject() {
this.computation = new Computation();
}
@After
public void DestroyComputationObject() {
this.computation = null;
}
@Test
public void sum_isCorrect() {
assertEquals(4, this.computation.Sum(2,2));
}
@Test
public void multiply_isCorrect() {
assertEquals(4, this.computation.Multiply(2,2));
}
}
@BeforeClass
@BeforeClassは@Beforeに似ていますが、@ BeforeClassアノテーションが付けられたメソッドは、特定のクラスのすべてのテストケースを実行する前に、一度だけ呼び出されるか実行されます。データベース接続オブジェクトのようなリソースを大量に消費するオブジェクトを作成すると便利です。これにより、テストケースのコレクションを実行する時間が短縮されます。このメソッドは、正しく機能するために静的である必要があります。このサンプルでは、以下に指定するように、すべてのテストケースを実行する前に、計算オブジェクトを1回作成できます。
package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ComputationUnitTest {
private static Computation computation = null;
@BeforeClass
public static void CreateComputationObject() {
computation = new Computation();
}
@Test
public void sum_isCorrect() {
assertEquals(4, computation.Sum(2,2));
}
@Test
public void multiply_isCorrect() {
assertEquals(4, computation.Multiply(2,2));
}
}
@放課後
@AfterClassは@BeforeClassに似ていますが、@ AfterClassアノテーションが付けられたメソッドは、特定のクラスのすべてのテストケースが実行された後に一度だけ呼び出されるか実行されます。このメソッドも、正しく機能するために静的である必要があります。サンプルコードは次のとおりです-
package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ComputationUnitTest {
private static Computation computation = null;
@BeforeClass
public static void CreateComputationObject() {
computation = new Computation();
}
@AfterClass
public static void DestroyComputationObject() {
computation = null;
}
@Test
public void sum_isCorrect() {
assertEquals(4, computation.Sum(2,2));
}
@Test
public void multiply_isCorrect() {
assertEquals(4, computation.Multiply(2,2));
}
}
@ルール
@RuleアノテーションはJUnitのハイライトの1つです。テストケースに動作を追加するために使用されます。TestRuleタイプのフィールドにのみ注釈を付けることができます。実際には、@ Beforeおよび@Afterアノテーションによって提供される機能セットを提供しますが、効率的で再利用可能な方法です。たとえば、テストケース中にデータを保存するための一時フォルダーが必要になる場合があります。通常、テストケースを実行する前に(@Beforeまたは@BeforeClassアノテーションを使用して)一時フォルダーを作成し、テストケースの実行後に(@Afterまたは@AfterClassアノテーションを使用して)破棄する必要があります。代わりに、JUnitフレームワークによって提供されるTemporaryFolder(タイプTestRule)クラスを使用して、すべてのテストケース用の一時フォルダーを作成できます。一時フォルダーは、テストケースの実行時に削除されます。TemporaryFolder型の新しい変数を作成し、以下に指定するように@Ruleでアノテーションを付ける必要があります。
package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import java.io.File;
import java.io.IOException;
import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertEquals;
public class ComputationUnitTest {
private static Computation computation = null;
@Rule
public TemporaryFolder folder = new TemporaryFolder();
@Test
public void file_isCreated() throws IOException {
folder.newFolder("MyTestFolder");
File testFile = folder.newFile("MyTestFile.txt");
assertTrue(testFile.exists());
}
@BeforeClass
public static void CreateComputationObject() {
computation = new Computation();
}
@AfterClass
public static void DestroyComputationObject() {
computation = null;
}
@Test
public void sum_isCorrect() {
assertEquals(4, computation.Sum(2,2));
}
@Test
public void multiply_isCorrect() {
assertEquals(4, computation.Multiply(2,2));
}
}
実行順序
JUnitを以下に示すように、異なるアノテーションを付け方法は、特定の順序で実行されます
@BeforeClass
@Rule
@Before
@Test
@After
@AfterClass
アサーション
アサーションは、テストケースの期待値がテストケース結果の実際の値と一致するかどうかを確認する方法です。JUnitは、さまざまなシナリオにアサーションを提供します。いくつかの重要なアサーションを以下に示します-
fail() −テストケースを明示的に失敗させる。
assertTrue(boolean test_condition) −test_conditionがtrueであることを確認します
assertFalse(boolean test_condition) −test_conditionがfalseであることを確認します
assertEquals(expected, actual) −両方の値が等しいことを確認します
assertNull(object) −オブジェクトがnullであることを確認します
assertNotNull(object) −オブジェクトがnullでないことを確認します
assertSame(expected, actual) −両方が同じオブジェクトを参照していることを確認します。
assertNotSame(expected, actual) −両方が異なるオブジェクトを参照していることを確認します。