1.按照如下格式编写代码
UserServiceImpl.java
package com.qunar.service.impl;
import com.qunar.dao.IUserDAo;
import com.qunar.dao.impl.UserDAOImpl;
import com.qunar.model.User;
import com.qunar.model.UserException;
import com.qunar.service.IUserService;
public class UserServiceImpl implements IUserService {
private IUserDAo userDAo;
public UserServiceImpl() {
userDAo = new UserDAOImpl();
}
public UserServiceImpl(IUserDAo userDAo) {
super();
this.userDAo = userDAo;
}
public void add(User user) {
if (loader(user.getUsername())!=null) {
throw new UserException("用户名已经存在");
}
userDAo.add(user);
}
@Override
public void delete(String username) {
if(username.equals("superadmin")){
return ;
}
userDAo.delete(username);
}
@Override
public User loader(String username) {
return userDAo.load(username);
}
@Override
public User login(String username, String password) {
User user = loader(username);
if(user==null){
throw new UserException("用户名不存在");
}
if(user.getPassword()!= password){
throw new UserException("用户密码不正确");
}
return user;
}
}
2.UserStubDAOImpl.java (表示桩)package com.qunar.dao.impl;
import java.util.Map;
import com.google.common.collect.Maps;
import com.qunar.dao.IUserDAo;
import com.qunar.model.User;
public class UserStubDAOImpl implements IUserDAo {
private Map<String, User> map = Maps.newHashMap();
@Override
public void add(User user) {
map.put(user.getUsername(), user);
}
@Override
public void delete(String username) {
map.remove(username);
}
@Override
public User load(String username) {
return map.get(username);
}
}
3.TestUserService.java
package com.qunar.service;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import com.qunar.dao.impl.UserStubDAOImpl;
import com.qunar.model.User;
import com.qunar.model.UserException;
import com.qunar.service.impl.UserServiceImpl;
public class TestUserService {
private IUserService us;
private User baseUser;
@Before
public void setUp() {
// init
us = new UserServiceImpl(new UserStubDAOImpl());
baseUser = new User("admin", "123", "管理员");
}
@Test
public void testAdd() {
User user = baseUser;
us.add(user);
User user2 = us.loader("admin");
assertNotNull(user2);
assertTrue(user.getUsername().equals(user2.getUsername()));
}
@Test
public void testDelete() {
us.add(baseUser);
User tUser = us.loader(baseUser.getUsername());
assertNotNull(tUser);
us.delete(baseUser.getUsername());
tUser = us.loader(baseUser.getUsername());
assertNull("删除的用户还存在", tUser);
}
@Test
public void testLogin() {
us.add(baseUser);
String username = "admin";
String password = "123";
User user = us.login(username, password);
assertTrue(user.equals(baseUser));
}
@Test(expected = UserException.class)
public void testNotExistsUserLogin() {
us.add(baseUser);
String username = "admin1";
String password = "123";
us.login(username, password);
}
@Test(expected = UserException.class)
public void testPasswordErrorUserLogin() {
us.add(baseUser);
String username = "admin";
String password = "1234";
us.login(username, password);
}
@Test(expected = UserException.class)
public void testAddExistUser() {
us.add(baseUser);
us.add(baseUser);
us.add(new User("admin", "123", "123"));
}
}
setUp中
us = new UserServiceImpl(new UserStubDAOImpl());
这样用map来模拟可以完成数据库的隔离。stub 是基于状态的对象这样测试全部通过