5分钟掌握JUnit要点

第一分钟:声明测试方法

新建一个类,在要测试的方法上面添加@Test注解

1import org.junit.Test; 2import static org.junit.Assert.assertEquals; 3 4public class UserServiceTest{ 5 @Test 6 public void should_success_when_login() { 7 assertEqualis(5, 2+ 3); 8 } 9}

注意: 一下方法方将被忽略,不被识别为测试类:

JUnit发现一个非public方法,就会忽略它;

如果发现方法带有参数,就会忽略它;

如果方法返回非void,就会忽略它;

如果方法声明为static,就会忽略它;

如果方法没有JUnit的@Test注解,就会忽略它;

第二分钟:Junit生命周期

@BeforeClass 所有测试方法执行前执行

@Before    每个测试方法执行先执行

@Test    执行测试方法

@After    每个测试方法执行后执行

@AfterClass    所有测试方发执行后执行

1public void UserServiceTest{ 2 private User user; 3 @BeforeClass 4 public void register(){ 5 this.user = new User(); 6 } 7 8 @Before 9 public void setup() { 10 this.user.setUserName("Aaron"); 11 } 12 13 @Test 14 public void should_success_when_login_with_username() { 15 assertNotNull(this.user); 16 assertEquals(this.user.getUserName(), "Aaron"); 17 } 18 19 @After 20 public void resetUser() { 21 this.user.setUserName(""); 22 } 23 24 @AfterClass 25 public void destroyUser() { 26 this.user = null; 27 } 28}

第三分钟: JUnit断言

常用的断言如下:

    assertEquals    断言两个对象是否相等。

    assertArrayEquals     断言两个数组是否包含相同的元素。

    assertTrue    断言语句为真。

    assertFalse    断言语句为假。

    assertNull    断言对象引用为空。

    assertNotNull    断言对象引用不为空。

    assertSame    断言两个对象引用指向同一个实例。

    assertNotSame    断言两个对象引用指向不是同一个实例。

    assertThat    断言对象满足制定的条件(后面会有例子)

第四分钟:JUnit验证抛出的异常信息

有时,代码中会主动抛出异常信息,例如:当用户登录时如果参数传递为空应该抛出控制指针异常,使用JUnit可以验证代码逻辑中当传入null时,是否真的抛出期望的异常信息。

1public class UserValidator{ 2 public void validateUserName(String name) { 3 if (String.isEmpty(name)){ 4 throw new ArgumentException(); 5 } 6 } 7} 8 9 10public class UserValidatorTest { 11 private UserValidator userValidator; 12 @BeforeClass 13 public void setup() { 14 userValidator = new UserValidator(); 15 } 16 17 @Test(expected=ArgumentException.class) 18 public void shouldThrowExceptionWhenUsernameIsEmpty() { 19 String username = ""; 20 userValidator.validateUserName(username); 21 } 22 23}

第五分钟:assertThat扩展

    org.junit.Assert中的assertThat最为特别,他是一个钩子方法,允许程序员来扩展基本的断言或者使用第三方的匹配库。下面的例子是判断两个User对象是否相同。

1public class User{ 2 private String name; 3 4 public void setName(String name){ 5 this.name = name; 6 } 7 public String get 8 9 @Override 10 public boolean equals(Object obj) { 11 User user = (User)obj; 12 return name.equals(obj.getName()); 13 } 14 @Override 15 public int hashCode(){ 16 return 1; 17 } 18} 19 20 21public class UserTest{ 22 private User user; 23 24 @Before 25 public void setup() { 26 this.user = new User(); 27 this.user.setName("ab"); 28 } 29 30 31 @Test 32 public void shouldSuccessWhenNameEquals() { 33 User actualUser = new User(); 34 actualUser.setName(this.user.getName()); 35 assertThat(actualUser, is(this.user)); 36 } 37}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )