如何用参数编写单元测试?

时间:2017-05-23 05:19:49

标签: java c# unit-testing junit mockito

我不熟悉java,但在c#(NUnit)中,您可以通过添加[TestCase]属性来参数化单元测试,如下所示:

[TestCase(12,3,4)]
[TestCase(12,2,6)]
[TestCase(12,4,3)]
public void DivideTest(int n, int d, int q)
{
   Assert.AreEqual( q, n / d );
}

在这种情况下,我们不必为每个测试用例编写单独的单元测试。相反,我们编写了[TestCase]来更改值。

Java上有什么平等的吗? 目前正在使用Junit 4.12

2 个答案:

答案 0 :(得分:5)

参数化是您所需要的。考虑下面的例子。请注意,test3显然为红色,为20/5 = 4。

import static org.junit.Assert.assertEquals;

import java.util.Arrays;
import java.util.Collection;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

@RunWith(Parameterized.class)
public class DividerTest {

  private int dividend;
  private int divisor;
  private int expectedResult;

  @Parameterized.Parameters
  public static Collection<Object[]> data() {
    Object[] test1 = { 10, 5, 2 };
    Object[] test2 = { 15, 5, 3 };
    Object[] test3 = { 20, 5, 5 };

    return Arrays.asList(test1, test2, test3);
  }

  public DividerTest(int dividend, int divisor, int expectedResult) {
    this.dividend = dividend;
    this.divisor = divisor;
    this.expectedResult = expectedResult;
  }

  @Test
  public void testDivider() {
    assertEquals(expectedResult, dividend / divisor);
  }
}

以下是测试结果:

enter image description here

答案 1 :(得分:0)

TestNG是一个库和框架,使用数据工厂和依赖注入可以很好地控制测试参数。