单元测试
就是针对最小的功能单元(方法),编写测试代码对其进行正确性测试。
Junit的简单使用
- 为需要测试的业务类,定义对应的测试类
- 为每个业务方法,编写对应的测试方法(必须:公共public、无参、无返回值
void
) - 测试方法名推荐格式:test待测试方法名【首字母改为大写】
- 为每个业务方法,编写对应的测试方法(必须:公共public、无参、无返回值
- 测试方法上必须声明
@Test注解
- 然后在测试方法中,编写代码调用被测试的业务方法进行测试;
- 如果测试通过则是绿色;如果测试失败,则是红色
IDEA
中已经集成,可以单独运行一个测试方法,也可以运行所有
测试应该考虑极端情况
业务类
public class MyClass {
public static void start() {
System.out.println("开始计时");
}
public static int sum(int num) {
int sum = 0;
for (int i = 0; i <= num; i++) {
sum += i;
}
return sum;
}
public int getLength(String s) { //这里并没有对s进行控制判断等,我们测试应该考虑空值的情况
return s.length();
}
}
测试类
public class MyClassTest {
@Test
public void testStart() {
MyClass.start();
}
@Test
public void testSum() {
int sum = MyClass.sum(100);
System.out.println(sum);
}
@Test
public void testGetLength() {
MyClass myClass = new MyClass();
int length = myClass.getLength("12345");
System.out.println(length);
int length1 = myClass.getLength(null); //null测试
System.out.println(length1);
}
}
结果
- 可以看到
getLength
空指针异常,接下来我们可以修改业务代码,增加null判断
,再次测试即可
Junit断言
问题描述
新增方法
public static int getMaxIndex(String str) { //获取字符串所有长度
if(str==null){
return 0;
}
int indexLength = str.length(); //这里是有误的
return indexLength;
}
测试
@Test
public void testGetIndex() {
System.out.println(MyClass.getMaxIndex(null));
System.out.println(MyClass.getMaxIndex("01234"));
}
测试结果
- 虽然没有报错,但是结果是错误的,最大索引是4,但运行结果是5。那怎么办?测不了吗?
断言
期望值与运行结果不一致就会错误
Assert.assertEquals(String 错误提示,期望值,运行值);
测试
@Test
public void testGetIndex() {
int maxIndex = MyClass.getMaxIndex(null); //没处理的话,自己报空指针异常
int maxIndex1 = MyClass.getMaxIndex("01234");
Assert.assertEquals("有bug", 4, maxIndex1);
}
结果
- 修改业务方法后,再次测试即可
Junit常用注解
junit4.*
注解 | 说明 |
---|---|
@Test | 测试类中的方法必须用它修饰才能成为测试方法,才能启动执行。 |
@Before | 用来修饰一个实例方法,该方法会在每一个测试方法执行之前执行一次。 |
@After | 用来修饰一个实例方法,该方法会在每一个测试方法执行之后执行一次。 |
@BeforeClass | 用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次。 |
@AfterClass | 用来修饰一个静态方法,该方法会在所有测试方法之后只执行一次。 |
在测试方法执行前执行的方法,常用于:初始化资源。【如Socket
创建】
在测试方法执行完后再执行的方法,常用于:释放资源。【如Socket
关闭】
Junit改名而已
public class MyClassTest {
@BeforeClass
public static void beforeClass() {
System.out.println("执行@BeforeClass注解修饰的方法:在所有测试方法之前只执行一次");
}
@AfterClass
public static void afterClass() {
System.out.println("执行@AfterClass注解修饰的方法:在所有测试方法之后只执行一次");
}
@Before
public void before() {
System.out.println("执行@Before注解修饰的方法:在每一个测试方法执行之前执行一次");
}
@After
public void after() {
System.out.println("执行@After注解修饰的方法:在每一个测试方法执行之后执行一次");
}
@Test
public void test1() {
System.out.println("执行@Test注解修饰的方法:这是一个测试方法");
}
@Test
public void test2() {
System.out.println("执行@Test注解修饰的方法:这是另一个测试方法");
}
}
标签:void,System,public,println,Junit,测试方法,out
From: https://www.cnblogs.com/SimpleWord/p/17706111.html