技术开发 频道

在Eclipse中使用JUnit4进行单元测试

  五、 参数化测试

  你可能遇到过这样的函数,它的参数有许多特殊值,或者说他的参数分为很多个区域。比如,一个对考试分数进行评价的函数,返回值分别为“优秀,良好,一般,及格,不及格”,因此你在编写测试的时候,至少要写5个测试,把这5中情况都包含了,这确实是一件很麻烦的事情。我们还使用我们先前的例子,测试一下“计算一个数的平方”这个函数,暂且分三类:正数、0、负数。测试代码如下:

  import org.junit.AfterClass;

  import org.junit.Before;

  import org.junit.BeforeClass;

  import org.junit.Test;

  import static org.junit.Assert.*;

  public class AdvancedTest ...{

  private static Calculator calculator = new Calculator();

  @Before

  public void clearCalculator() ...{

  calculator.clear();

  }

  @Test

  public void square1() ...{

  calculator.square(2);

  assertEquals(4, calculator.getResult());

  }

  @Test

  public void square2() ...{

  calculator.square(0);

  assertEquals(0, calculator.getResult());

  }

  @Test

  public void square3() ...{

  calculator.square(-3);

  assertEquals(9, calculator.getResult());

  }

  }

  为了简化类似的测试,JUnit4提出了“参数化测试”的概念,只写一个测试函数,把这若干种情况作为参数传递进去,一次性的完成测试。代码如下:

  import static org.junit.Assert.assertEquals;

  import org.junit.Test;

  import org.junit.runner.RunWith;

  import org.junit.runners.Parameterized;

  import org.junit.runners.Parameterized.Parameters;

  import java.util.Arrays;

  import java.util.Collection;

  @RunWith(Parameterized.class)

  public class SquareTest ...{

  private static Calculator calculator = new Calculator();

  private int param;

  private int result;

  @Parameters

  public static Collection data() ...{

  return Arrays.asList(new Object[][]...{

  ...{2, 4},

  ...{0, 0},

  ...{-3, 9},

  });

  }

  //构造函数,对变量进行初始化

1
相关文章