TA的每日心情 | 无聊 2024-9-27 10:07 |
---|
签到天数: 62 天 连续签到: 1 天 [LV.6]测试旅长
|
2#
楼主 |
发表于 2018-3-7 16:14:46
|
只看该作者
当方法用时超过1000毫秒时,此方法会自动中止并执行失败
package com.logic.test;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import com.logic.LogicService;
public class LogicServiceTest {
LogicService logserv ;
@Before
public void setUp() throws Exception {
logserv = new LogicService();
}
@Ignore
public void testAdd() {
}
@Ignore
public void testSub() {
}
@Ignore
public void testDiv() {
}
@Test(timeout=1000)
public void testDiv2() {
System.out.print("我不会超过1000毫秒的");
}
@Test(timeout=1000)
public void testLoop() {
logserv.loop(1, 1);//此方法使用的是死循环实现,所以一定会超过限时,超过限时后此方法会自动中止
}
@Ignore
public void testUnCompleted() {
}
}
执行结果
loop方法超时报错,div2方法不超时成功
2 Junit提供异常处理的机制。
@Test(expected=Exception.class) 其中Exception.class可以写的更加具体
测试
@Test(expected=Exception.class)
public void testDiv() {
System.out.print(logserv.div(3, 0));
}
@Test(expected=Exception.class)
public void testDiv2() {
System.out.print(logserv.div(3, 0));
}
复制代码
执行结果
两个都通过
测试
复制代码
@Test(expected=Exception.class)
public void testDiv() {
System.out.print(logserv.div(3, 0));
}
@Test
public void testDiv2() {
System.out.print(logserv.div(3, 0));
}
执行结果
第一个通过 第二个不通过 异常为除数不能为zero
5 参数化配置 (@Parameters) 重要
进行单元测试的时候,通常一个方法需要好几个case进行测试,Junit提供参数化便于我们对方法进行
多种参数的组合测试
如果不使用参数化进行测试的话,那么我们的测试类会做的很臃肿
例如
@Test
public void testAdd() {
assertEquals("1+1 失败",2,logserv.add(1, 1) );
}
@Test
public void testAdd1() {
assertEquals("1+2 失败",3,logserv.add(1, 2) );
}
@Test
public void testAdd2() {
assertEquals("1+3 失败",3,logserv.add(1, 3) );
}
@Test
public void testAdd3() {
assertEquals("1+4 失败",3,logserv.add(1, 4) );
}
这样的测试类显然看起来不是很理想,代码过于重复
参数化的实现过程(重要)
1 在测试类上增加
@RunWith(Parameterized.class)并引入
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
2 写上构造类的函数及定义入参
例如
@RunWith(Parameterized.class)
public class LogicServiceTest {
LogicService logserv ;
int parm1 ;//定义入参
int parm2 ;//定义入参
int res;//定义入参
public LogicServiceTest(int parm1,int parm2,int res){//定义构造函数
this.parm1=parm1;
this.parm2=parm2;
this.res=res;
}
3 定义一个返回结果为collection类型的方法并写上@Parameters
注意 Arrays.asList()里面NEW的Object的要与定义的参数一一对应
例如
public class LogicServiceTest {
LogicService logserv ;
int parm1 ;//定义入参
int parm2 ;//定义入参
int res;//定义入参
public LogicServiceTest(int parm1,int parm2,int res){//定义构造函数
this.parm1=parm1;
this.parm2=parm2;
this.res=res;
}
@Parameters
public static Collection<Object[]> initParm(){
return Arrays.asList(new Object[][]{
{1,1,2},{1,2,3},{1,3,4},{1,3,5}//{}里的参数一定要和构造函数一一对应
});
}
4 编写测试方法,调用参数
@Test
public void testAdd() {
assertEquals(res,logserv.add(parm1, parm2));
}
5 测试类代码全景(准备执行)
复制代码
package com.logic.test;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import com.logic.LogicService;
@RunWith(Parameterized.class)
public class LogicServiceTest {
LogicService logserv;
int parm1;// 定义入参
int parm2;// 定义入参
int res;// 定义入参
public LogicServiceTest(int parm1, int parm2, int res) {// 定义构造函数
this.parm1 = parm1;
this.parm2 = parm2;
this.res = res;
}
@Parameters
public static Collection<Object[]> initParm() {
return Arrays.asList(new Object[][] { { 1, 1, 2 }, { 1, 2, 3 },
{ 1, 3, 4 }, { 1, 3, 5 } // {}里的参数一定要和构造函数一一对应
});
}
@Before
public void setUp() throws Exception {
logserv = new LogicService();
}
@Test
public void testAdd() {
assertEquals(res, logserv.add(parm1, parm2));
}
@Ignore
public void testSub() {
}
}
复制代码
6 执行结果
|
|