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

Web*_*rix 0 c# java junit unit-testing 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 );
}
Run Code Online (Sandbox Code Playgroud)

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

Java上是否有任何平等的东西?目前使用Junit 4.12

nxh*_*oaf 5

参数化是您所需要的.考虑下面的例子.请注意,test3显然是RED,因为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);
  }
}
Run Code Online (Sandbox Code Playgroud)

以下是测试结果:

在此输入图像描述