JUnit对我来说是新的,我正在测试我的应用程序如下:
@Before
code...
@After
code...
@Test
test for data1
@Test
test for data2...
@Test
test for dataN
但是当我为不同的参数测试相同的方法时,我不希望我的测试需要几百行。我想做这样的事情,但我希望得到每个测试的结果
@Test
public final void testAll(){
String data = load from file
String bool = load from file
boolean expectedResult;
if(bool.equals("T")
expectedResult = true;
else
expectedResult = false;
assertEquals(expectedResult, testedMethod(data);
}
在testAll()
内为所有数据提供某种循环。
答案 0 :(得分:5)
您需要的是Parameterized测试。 例如(来自维基)这个:
@RunWith(Parameterized.class)
public class FibonacciTest {
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{ 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 }
});
}
private int fInput;
private int fExpected;
public FibonacciTest(int input, int expected) {
fInput= input;
fExpected= expected;
}
@Test
public void test() {
assertEquals(fExpected, Fibonacci.compute(fInput));
}
}
是一个人的样子。
您可能还想查看更有用的TestNG's Data Providers。
答案 1 :(得分:-1)
不是使用JUnit的@Before
/ @After
注释,而是可以使用循环并在循环中运行每个测试用例,自己运行before和after方法。
E.g
for (int i = 0; i < 10; i++) {
String data = loadData(i);
boolean expected = loadResult(i);
myBefore();
try {
assertTrue(expected, testedMethod(data));
} finally {
myAfter();
}
}