第一分钟:声明测试方法
新建一个类,在要测试的方法上面添加@Test注解
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class UserServiceTest{
@Test
public void should_success_when_login() {
assertEqualis(5, 2+ 3);
}
}
注意: 一下方法方将被忽略,不被识别为测试类:
JUnit发现一个非public方法,就会忽略它;
如果发现方法带有参数,就会忽略它;
如果方法返回非void,就会忽略它;
如果方法声明为static,就会忽略它;
如果方法没有JUnit的@Test注解,就会忽略它;
第二分钟:Junit生命周期
@BeforeClass 所有测试方法执行前执行
@Before 每个测试方法执行先执行
@Test 执行测试方法
@After 每个测试方法执行后执行
@AfterClass 所有测试方发执行后执行
public void UserServiceTest{
private User user;
@BeforeClass
public void register(){
this.user = new User();
}
@Before
public void setup() {
this.user.setUserName("Aaron");
}
@Test
public void should_success_when_login_with_username() {
assertNotNull(this.user);
assertEquals(this.user.getUserName(), "Aaron");
}
@After
public void resetUser() {
this.user.setUserName("");
}
@AfterClass
public void destroyUser() {
this.user = null;
}
}
第三分钟: JUnit断言
常用的断言如下:
assertEquals 断言两个对象是否相等。
assertArrayEquals 断言两个数组是否包含相同的元素。
assertTrue 断言语句为真。
assertFalse 断言语句为假。
assertNull 断言对象引用为空。
assertNotNull 断言对象引用不为空。
assertSame 断言两个对象引用指向同一个实例。
assertNotSame 断言两个对象引用指向不是同一个实例。
assertThat 断言对象满足制定的条件(后面会有例子)
第四分钟:JUnit验证抛出的异常信息
有时,代码中会主动抛出异常信息,例如:当用户登录时如果参数传递为空应该抛出控制指针异常,使用JUnit可以验证代码逻辑中当传入null时,是否真的抛出期望的异常信息。
public class UserValidator{
public void validateUserName(String name) {
if (String.isEmpty(name)){
throw new ArgumentException();
}
}
}
public class UserValidatorTest {
private UserValidator userValidator;
@BeforeClass
public void setup() {
userValidator = new UserValidator();
}
@Test(expected=ArgumentException.class)
public void shouldThrowExceptionWhenUsernameIsEmpty() {
String username = "";
userValidator.validateUserName(username);
}
}
第五分钟:assertThat扩展
org.junit.Assert中的assertThat最为特别,他是一个钩子方法,允许程序员来扩展基本的断言或者使用第三方的匹配库。下面的例子是判断两个User对象是否相同。
public class User{
private String name;
public void setName(String name){
this.name = name;
}
public String get
@Override
public boolean equals(Object obj) {
User user = (User)obj;
return name.equals(obj.getName());
}
@Override
public int hashCode(){
return 1;
}
}
public class UserTest{
private User user;
@Before
public void setup() {
this.user = new User();
this.user.setName("ab");
}
@Test
public void shouldSuccessWhenNameEquals() {
User actualUser = new User();
actualUser.setName(this.user.getName());
assertThat(actualUser, is(this.user));
}
}