单元测试
什么是单元测试?
单元测试就是针对最小的功能单元编写测试代码, Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进而检查方法的正确性。
为什么需要单元测试?
1.当我们需要测试某个方法的正确性时,只能从main方法中调用,这一点比较麻烦,而且在测试多个方法时,语句是顺序执行的,当前面的方法出现错误,后面的方法就无法执行了。
2.普通的测试无法得到测试的结果报告,需要程序员自己去观察测试是否成功,而且无法实现自动化测试。
单元测试框架 —— Junit
- Junit是使用Java语言实现的开源的单元测试框架
- Junit可以选择执行哪些测试方法,可以一键执行全部测试方法的测试
- 可以生测试报告,测试良好是绿色,测试失败则是红色
- 单元测试中的某个方法测试失败了,不会影响其他测试方法的测试
Junit使用方法
-
Idea自带了Junit,可以不必导入Junit的jar包,这里提供了Junit的Maven依赖: <dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
-
设置一个public、无参、无返回值、非静态的方法为测试方法 -
在测试方法上使用@Test 注解进行标注 -
在测试方法中编码,完成对被测试方法的测试
Junit中使用断言
断言即预言,在testLoginName() 方法中调用了断言类的方法用于对预期的结果作正确性的测试。
Assert.assertEquals(String message, Object expected, Object actual)
import org.junit.Assert;
import org.junit.Test;
public class Junit_Test {
@Test
public void testLoginName() {
UserService userService = new UserService();
String rs = userService.loginName("admin1", "123456");
Assert.assertEquals("你的功能业务可能出现问题", "登录成功", rs);
}
@Test
public void testSelectNames() {
UserService userService = new UserService();
userService.selectNames();
}
}
class UserService {
public String loginName(String loginName, String password) {
if ("admin".equals(loginName) && "123456".equals(password)) {
return "登录成功";
} else {
return "用户名或密码出现错误";
}
}
public void selectNames() {
System.out.println(10 / 0);
System.out.println("查询全部用户名称成功");
}
}
Junit常用注解
Junit4:
public class Junit_Test {
@Before
public void Before() {
System.out.println("每个测试方法前执行一次");
}
@After
public void After() {
System.out.println("每个测试方法后执行一次");
}
@BeforeClass
public static void BeforeClass() {
System.out.println("所有测试方法前执行一次");
}
@AfterClass
public static void AfterClass() {
System.out.println("所有测试方法后执行一次");
}
}
Junit5:
两个版本注解功能一样,只是名称有所改变
|