我正在编写用于测试API的jnuit测试用例。
我的课程如下
class MyTest extends TestCase{
List<String> argList;
public MyTest(){
//read argList from File
}
testMyTest(){
//callmy api
myApi(arg1);
}
}
现在我想为50个args中的每个args创建一个单独的测试用例。从File中读取Args。我不想写一个单独的方法用不同的args调用myApi。我怎么能这样做? 我不想写像
这样的sperate方法testMyTest1(){
//callmy api
myApi(arg1);
}
testMyTest1(){
//callmy api
myApi(arg2);
}
答案 0 :(得分:2)
您可以使用parameterized test。
答案 1 :(得分:1)
private static final String[] args = new String[] {.....};
@Test
public void myTest(){
for (int i=0; i<args.length; i++){
myApi(args[i];
}
}
以上回答了我的问题,但是JUnit的做法并不好。最好每个测试方法仅使用一个测试条件调用一次测试方法。这样,如果出现多个错误,每个错误都会产生一个单独的错误,而不是一次只处理一个错误。这表明如下:
private static final String[] args = new String[] {.....};
private void testMyTest(String arg){
myApi(arg);
}
@Test
public void myTest0(){
testMyTest(args[0]);
}
@Test
public void myTest1(){
testMyTest(args[1]);
}
可能最好的机制是执行上面的第一个选项,但使用ErrorCollector规则允许报告多个错误。
编辑我坚持认为,jordao关于参数化测试的答案确实是最好的方法。
答案 2 :(得分:1)
您可以使用参数化测试或理论(自JUnit 4.4起)。有关详细信息,请使用
答案 3 :(得分:0)
单元测试通常使用断言进行。您不需要为每个参数编写方法,而是根据您的参数执行不同的断言。
这样做的一种方法是:
class MyApiTest extends TestCase {
List<String> argList;
public MyApiTest() {}
public testMyApi() {
assertTrue(testMyApi(arg1));
assertFalse(testMyApi(arg2));
assertNull(testMyApi(arg3));
assertEquals(testMyApi(arg4), testMyApi(arg5));
}
}
我甚至更喜欢使用注释,比如
class MyApiTest {
@Before
public setUp() {}
@After
public tearDOwn() {}
@Test
public testMyApi() {
Assert.assertTrue(testMyApi(arg1));
Assert.assertFalse(testMyApi(arg2));
Assert.assertNull(testMyApi(arg3));
Assert.assertEquals(testMyApi(arg4), testMyApi(arg5));
}
}