我不熟悉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
答案 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);
}
}
以下是测试结果:
答案 1 :(得分:0)
TestNG是一个库和框架,使用数据工厂和依赖注入可以很好地控制测试参数。