概念:
指针对最小的功能单元编写测试代码。
而Java中最小的功能单元是方法,所以在Java中,单元测试指的是对单个Java方法的测试。
使用单元测试的原因:
相信我们最常用的测试代码的方法就是在main()方法中调用各方法,但是,main()方法存在以下几点缺点:
1、如果其中的一个方法出现了错误,其他的方法也会受到影响
2、无法得到测试报告,只能自己一一检查结果是否正确
3、无法实现自动化测试,当方法数量过多的时候,消耗大量时间
针对以上缺点,junit单元测试框架正好可以进行解决:
1、各测试方法相互独立,互不影响
2、可生成测试报告,简单明了
3、可以灵活选择要执行哪些测试方法,也可以一键执行全部的测试方法
单元测试示例
public class userLogin {
public String login(String loginName,String password){
if ("admin".equals(loginName)&&"123456".equals(password)){
return "登陆成功";
}else {
return "用户名或密码有问题!";
}
}
}
import org.junit.Assert;
import org.junit.Test;
public class TestUserLogin {
@Test
public void testUserLogin(){
userLogin userLogin=new userLogin();
String rs=userLogin.login("admin","123456");
Assert.assertEquals("登陆业务出错!","登陆成功",rs);
}
}
我们简单的写一个登陆方法和它对应的测试,当然,此处有一些注意点
1、测试方法的注意事项
(1)应为公开(public)且无参无返回值
(2)要用@Test注解在其前进行标注
2、在idea中导入junit的jar包
大家一开始使用的时候idea中很有可能是没有导入junit的jar包的,不用担心
在@Test处敲一下alt和enter键,会出现上图这样的界面,我选择的是导入junit4(大家可以自行选择),之后点击ok就可以啦,如下图
3、进行预期结果的正确性测试:断言
我们一般使用上面这个方法
assertEquals(“失败消息提示","预期结果","实际结果”);
4、运行
在测试方法中右键直接运行就可以啦,绿色的小对勾表示你的测试通过了;
当我把测试方法中的“admin”修改为“admin1”时,再运行测试方法,他就会出现错误的测试报告:
常用注解
1、@Before:修饰实例方法,在每一个测试方法执行之前执行一次
2、@After:修饰实例方法,在每一个测试方法执行之后执行一次
3、@BeforeClass:修饰静态方法,在所有测试方法执行之前只执行一次
4、@AfterClass:修饰静态方法,在所有测试方法执行之后只执行一次
1、用处
执行之前执行:用于初始化资源
执行之后执行:用于释放资源
Example c = null;
@Before
public void beforeClass() {
c = new Example();
}
@Test
public void testStatementCoverage(){
int result = c.logicTest(1, 1);
TestCase.assertEquals(result, 12);
}
如上图,在@Before中进行Example对象的初始化,之后在每次的@Test方法执行之前就会创建新的实例
注意:实例变量的值不会传递给下一个@Test方法
2、执行顺序
3->1->2->4
@Before
public void Before(){
System.out.println("执行Before");
}
@After
public void After(){
System.out.println("执行After");
}
@BeforeClass
public static void BeforeClass(){
System.out.println("执行BeforeClass");
}
@AfterClass
public static void AfterClass(){
System.out.println("执行AfterClass");
}