Java単体テストライブラリ-Artery/JUnit4-数値の等値判定


目次 ⇒ Java単体テストライブラリ-Artery-サンプル

package jp.avaj.lib.test;

import static org.junit.Assert.*;

import java.math.BigDecimal;

import org.junit.Test;

/**
  Java単体テストライブラリ-Artery/JUnit4-数値の等値判定

  Arteryでは異なるタイプの数値でも等値判定をすることができる
    doubleでは(現在のところ)判定誤差は指定できない.
  JUnit4ではInteger vs Longなどの比較では等しい値でもNGになるので注意する.
 */
public class Q02_00 {
  //////// 以下はArteryのサンプル
  public static void main(String[] args) {
    ArTest.startTestCase("Q02_00");

    // int vs int
    {
      int value0 = 5;
      int value1 = 5;
      ArTest.equals("int vs int","value0",value0,"value1",value1);
      value1 = 10;
      ArTest.equals("int vs int (NG)","value0",value0,"value1",value1);
    }
    // int vs long
    {
      int value0 = 5;
      long value1 = 5L;
      ArTest.equals("int vs long","value0",value0,"value1",value1);
      value1 = 10L;
      ArTest.equals("int vs long (NG)","value0",value0,"value1",value1);
    }
    // int vs double
    {
      int value0 = 5;
      double value1 = 5D;
      ArTest.equals("int vs double","value0",value0,"value1",value1);
      value1 = 10D;
      ArTest.equals("int vs double (NG)","value0",value0,"value1",value1);
    }
    // int vs BigDecimal
    {
      int value0 = 5;
      BigDecimal value1 = new BigDecimal(5);
      ArTest.equals("int vs BigDecimal","value0",value0,"value1",value1);
      value1 = new BigDecimal(10);
      ArTest.equals("int vs BigDecimal (NG)","value0",value0,"value1",value1);
    }
    // int vs String ⇒ 数値でなくてもできる..⇒ 使わない方が良いかも..
    {
      int value0 = 5;
      String value1 = "5";
      ArTest.equals("int vs String","value0",value0,"value1",value1);
      value1 = "10";
      ArTest.equals("int vs String (NG)","value0",value0,"value1",value1);
    }
    // Integer vs Long
    {
      Integer value0 = 5;
      Long value1 = 5L;
      ArTest.equals("Integer vs Long","value0",value0,"value1",value1);
      value1 = 10L;
      ArTest.equals("Integer vs Long (NG)","value0",value0,"value1",value1);
    }
    // Integer vs Double
    {
      Integer value0 = 5;
      Double value1 = 5D;
      ArTest.equals("Integer vs Double","value0",value0,"value1",value1);
      value1 = 10D;
      ArTest.equals("Integer vs Double (NG)","value0",value0,"value1",value1);
    }
    // Integer vs BigDecimal
    {
      Integer value0 = 5;
      BigDecimal value1 = new BigDecimal(5);
      ArTest.equals("Integer vs BigDecimal","value0",value0,"value1",value1);
      value1 = new BigDecimal(10);
      ArTest.equals("Integer vs BigDecimal (NG)","value0",value0,"value1",value1);
    }
    // Integer vs String ⇒ 数値でなくてもできる..⇒ 使わない方が良いかも..
    {
      Integer value0 = 5;
      String value1 = "5";
      ArTest.equals("Integer vs String","value0",value0,"value1",value1);
      value1 = "10";
      ArTest.equals("Integer vs String (NG)","value0",value0,"value1",value1);
    }
    //
    ArTest.endTestCase();
  }

  //////// 以下はJUnit4のサンプル

  // int同士の等値判定-等しい場合
  @Test
  public void test00() {
    assertEquals(5,5);
  }

  // int同士の等値判定-等しくない場合
  @Test
  public void test01() {
    assertEquals(5,10);
  }

  // int vs longの等値判定-等しい場合
  @Test
  public void test02() {
    assertEquals(5,5L);
  }

  // int vs longの等値判定-等しくない場合
  @Test
  public void test03() {
    assertEquals(5,10L);
  }

  // int vs doubleの等値判定
  @Test
  public void test04() {
    // doubleの場合は判定誤差を指定する
    assertEquals(5,5D,0.01D);
  }

  // int vs BigDecimalの等値判定 ⇒ 同じ値でもNGとなる
  // これはOKにしてほしい... ⇒ でなければコンパイルエラーにしてほしい
  @Test
  public void test05() {
    assertEquals(5,new BigDecimal(5));
  }

  // Integer vs Longの等値判定 ⇒ 同じ値でもNGとなる
  // これはOKにしてほしい... ⇒ でなければコンパイルエラーにしてほしい
  @Test
  public void test06() {
    assertEquals(new Integer(5),new Long(5L));
  }

  // 蛇足 int vs String ⇒ (当然ながら)NGになる
  @Test
  public void test07() {
    assertEquals(5,"5");
  }
}

結果は次の通り

result.txt
**** Q02_00 start ****
OK int vs int:value0=5:value1=5
NG int vs int (NG):value0=5:value1=10
jp.avaj.lib.test.Q02_00.main(Q02_00.java:27)
OK int vs long:value0=5:value1=5
NG int vs long (NG):value0=5:value1=10
jp.avaj.lib.test.Q02_00.main(Q02_00.java:35)
OK int vs double:value0=5:value1=5
NG int vs double (NG):value0=5:value1=10
jp.avaj.lib.test.Q02_00.main(Q02_00.java:43)
OK int vs BigDecimal:value0=5:value1=5
NG int vs BigDecimal (NG):value0=5:value1=10
jp.avaj.lib.test.Q02_00.main(Q02_00.java:51)
OK int vs String:value0=5:value1=5
NG int vs String (NG):value0=5:value1=10
jp.avaj.lib.test.Q02_00.main(Q02_00.java:59)
OK Integer vs Long:value0=5:value1=5
NG Integer vs Long (NG):value0=5:value1=10
jp.avaj.lib.test.Q02_00.main(Q02_00.java:67)
OK Integer vs Double:value0=5:value1=5
NG Integer vs Double (NG):value0=5:value1=10
jp.avaj.lib.test.Q02_00.main(Q02_00.java:75)
OK Integer vs BigDecimal:value0=5:value1=5
NG Integer vs BigDecimal (NG):value0=5:value1=10
jp.avaj.lib.test.Q02_00.main(Q02_00.java:83)
OK Integer vs String:value0=5:value1=5
NG Integer vs String (NG):value0=5:value1=10
jp.avaj.lib.test.Q02_00.main(Q02_00.java:91)
**** Q02_00 summary ****
test count = 18
success    = 9