Espresso-testing-overview-of-junit

提供:Dev Guides
移動先:案内検索

Espresso Testing Framework-JUnitの概要

この章では、エスプレッソテストフレームワークが構築されるJavaコミュニティによって開発された人気のあるユニットテストフレームワークである_JUnit_の基本を理解しましょう。

_JUnit_は、Javaアプリケーションの単体テストの事実上の標準です。 単体テストで一般的ですが、計装テストも完全にサポートおよび提供されています。 Espressoテストライブラリは、必要なJUnitクラスを拡張して、Androidベースのインスツルメンテーションテストをサポートします。

簡単な単体テストを書く

Javaクラス_Computation_(Computation.java)を作成し、簡単な数学演算_Summation_および_Multiplication_を作成しましょう。 次に、_JUnit_を使用してテストケースを作成し、テストケースを実行して確認します。

  • Android Studioを起動します。
  • 前の章で作成した_HelloWorldApp_を開きます。 *_App/src/main/java/com/finddevguides/espressosamples/helloworldapp/_にファイル_Computation.java_を作成し、以下のように_Sum_および_Multiply_という2つの関数を記述します。
package com.finddevguides.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/finddevguides/espressosamples/helloworldappにファイルComputationUnitTest.javaを作成し、ユニットテストケースを記述して、以下に示すようにSumおよびMultiply機能をテストします。
package com.finddevguides.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));
   }
}

ここでは、2つの新しい用語_ @ Test_と_assertEquals_を使用しました。 一般に、JUnitはJavaアノテーションを使用して、クラス内のテストケースとテストケースの実行方法に関する情報を識別します。 _ @ Test_はそのようなJavaアノテーションの1つで、特定の関数がjunitテストケースであることを指定します。 _assertEquals_は、最初の引数(期待値)と2番目の引数(計算値)が等しく同じであることをアサートする関数です。 _JUnit_は、さまざまなテストシナリオ用の多数のアサーションメソッドを提供します。

  • 次に、前の章で説明したように、クラスを右クリックし、Run _'ComputationUnitTest'_オプションを呼び出して、Androidスタジオで_ComputationUnitTest_を実行します。 これにより、単体テストケースが実行され、成功が報告されます。

計算ユニットテストの結果は以下のとおりです-

計算ユニットテスト

アノテーション

JUnitフレームワークはアノテーションを広範囲に使用します。 重要な注釈のいくつかは次のとおりです-

  • @テスト
  • @前
  • @後
  • @BeforeClass
  • @放課後
  • @ルール

_ @ Test_注釈

_ @ Test_は、JUnit_フレームワークで非常に重要な注釈です。 _ @ Test_は、通常のメソッドとテストケースメソッドを区別するために使用されます。 メソッドが @ Test_アノテーションで装飾されると、その特定のメソッドは_Test case_と見なされ、_JUnit Runner_によって実行されます。 _JUnit Runner_は特別なクラスで、Javaクラス内で使用可能な_JUnitテストケースを見つけて実行するために使用されます。 現時点では、_Android Studioのビルドインオプションを使用してユニットテストを実行しています(これにより、_JUnit Runner_が実行されます)。 サンプルコードは次のとおりです。

package com.finddevguides.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_アノテーションは、特定のテストクラスで利用可能なテストメソッドを実行する前に呼び出す必要があるメソッドを参照するために使用されます。 たとえば、サンプルでは、​​Computation_オブジェクトを別のメソッドで作成し、 @ Before_アノテーションを付けて、_sum_isCorrect_と_multiply_isCorrect_の両方のテストケースの前に実行されるようにすることができます。 完全なコードは次のとおりです。

package com.finddevguides.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_は_ @ Before_と似ていますが、_ @ After_アノテーションが付けられたメソッドは、各テストケースの実行後に呼び出されるか実行されます。 サンプルコードは次のとおりです。

package com.finddevguides.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回だけ呼び出されるか実行されます。 データベース接続オブジェクトのようなリソースを集中的に使用するオブジェクトを作成すると便利です。 これにより、テストケースのコレクションを実行する時間が短縮されます。 このメソッドは、適切に機能するために静的である必要があります。 サンプルでは、​​以下に指定されているすべてのテストケースを実行する前に、計算オブジェクトを1回作成できます。

package com.finddevguides.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_アノテーションが付けられたメソッドは、特定のクラスのすべてのテストケースが実行された後に1回だけ呼び出されるか実行されます。 このメソッドは、正しく機能するために静的である必要もあります。 サンプルコードは次のとおりです-

package com.finddevguides.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_フレームワークによって提供される(_TestRule_型の)_TemporaryFolder_クラスを使用して、すべてのテストケース用の一時フォルダーを作成できます。一時フォルダーは、テストケースの実行時に削除されます。 タイプ_TemporaryFolder_の新しい変数を作成し、以下に指定するように @ Rule_で注釈を付ける必要があります。

package com.finddevguides.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
  • @ルール
  • @前
  • @テスト
  • @後
  • @放課後

アサーション

アサーションは、テストケースの期待値がテストケースの結果の実際の値と一致するかどうかを確認する方法です。 _JUnit_は、さまざまなシナリオのアサーションを提供します。いくつかの重要なアサーションを以下にリストします-

  • * fail()*-テストケースを明示的に失敗させる。
  • * assertTrue(boolean test_condition)*-test_conditionが真であることを確認します
  • * assertFalse(boolean test_condition)*-test_conditionがfalseであることを確認します
  • * assertEquals(expected、actual)*-両方の値が等しいことを確認します
  • * assertNull(object)*-オブジェクトがnullであることを確認します
  • * assertNotNull(object)*-オブジェクトがnullでないことを確認します
  • * assertSame(expected、actual)*-両方が同じオブジェクトを参照していることを確認します。
  • * assertNotSame(expected、actual)*-両方が異なるオブジェクトを参照していることを確認します。