`

Maven + Spring + Hibernate + Struts2 整合第三部分

阅读更多
现在我们写一个简单的单元测试来测试一下我们的代码,看看是不是配置文件都配好了。在src/test/java下面建立UserDAOTest.java文件,代码如下:
package localhost.login.dao;

import java.util.List;

import junit.framework.Assert;
import junit.framework.TestCase;
import localhost.login.domain.User;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserDAOTest extends TestCase{
	private ApplicationContext context = null;
	
	private User user = null;
	
	private UserDAO userDAO = null;
	
	@Override
	protected void setUp() throws Exception {
		super.setUp();
		context = new ClassPathXmlApplicationContext("applicationContext.xml");
		userDAO = (UserDAO)context.getBean("userDAO");
	}
	
	@Override
	protected void tearDown() throws Exception {
		userDAO = null;
		user = null;
	}
	
	public void testAddUser(){
		user = new User();
		user.setName("username");
		user.setPassword("password");
		userDAO.addUser(user);
		Assert.assertEquals(1, user.getId());
		userDAO.addUser(user);
		Assert.assertEquals(1, user.getId());
		
		User userTwo = new User();
		userTwo.setName("username1");
		userTwo.setPassword("password");
		userDAO.addUser(userTwo);
		Assert.assertEquals(2, userTwo.getId());
		
	}
	
	public void testlistAll(){
		List<User> users = userDAO.listAll();
		Assert.assertEquals(users.size(), 2);
	}
}


现在我们建立一个简单的辅助类,来获得ApplicationContext, 将它放在localhost.login.util包下面:
package localhost.login.util;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class InitApplicationContext {
	
	private static ApplicationContext context = null;
	
	private InitApplicationContext(){
		
	}
	public static ApplicationContext getApplicationContext(){
		if(context == null){
			context = new ClassPathXmlApplicationContext("applicationContext.xml");
		}
		return context;
	}
}


现在我们建立用户登陆的action,struts2的action比较简单,请看下面代码:
package localhost.login.action;

import java.util.List;

import localhost.login.domain.User;
import localhost.login.service.UserService;
import localhost.login.util.InitApplicationContext;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.opensymphony.xwork2.ActionSupport;

public class UserLoginAction extends ActionSupport {
	private UserService userService;
	private User user;

	public UserLoginAction() {
		ApplicationContext context = InitApplicationContext.getApplicationContext();
		userService = (UserService) context.getBean("userService");
	}

	@Override
	public String execute() throws Exception {
		if (!isValid(user.getName())) {
			return INPUT;
		}
		if (!isValid(user.getPassword())) {
			return INPUT;
		}
		if(!userCheck(user)){
			return INPUT;
		}
		return SUCCESS;
	}

	public boolean isValid(String keyword) {
		return keyword != null && keyword != "";
	}

	public boolean userCheck(User user) {
		List<User> userList = userService.findUserByName(user.getName());
		if (userList == null || userList.size() < 1) {
			return false;
		}
		User checkUser = userList.get(0);
		if (user.getName().equals(checkUser.getName())
				&& user.getPassword().equals(checkUser.getPassword())) {
			return true;
		}
		addActionError("Username or password is wrong, please check!");
		return false;
	}

	public UserService getUserService() {
		return userService;
	}

	public void setUserService(UserService userService) {
		this.userService = userService;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}
}

struts2比struts1最大的优点就是使得单元测试比较容易,现在我们就建立一个简单的测试用例来测试我们刚建立的action
把它放到src/main/java包底下,代码如下:
package localhost.login.action;
import junit.framework.Assert;
import junit.framework.TestCase;
import localhost.login.domain.User;
import localhost.login.service.UserService;
import localhost.login.util.InitApplicationContext;

import org.springframework.context.ApplicationContext;

import com.opensymphony.xwork2.Action;


public class UserLoginActionTest extends TestCase{
	private User user;
	
	private UserService userService;
	
	private ApplicationContext context = null;
	
	private UserLoginAction loginAction = null;
	
	public void setUp(){
		context = InitApplicationContext.getApplicationContext();
		loginAction = new UserLoginAction();
		userService = (UserService)context.getBean("userService");
	}
	
	public void testUserLogin(){
		user = new User();
		user.setName("username");
		user.setPassword("password");
		try {
			loginAction.setUser(user);
			loginAction.setUserService(userService);
			Assert.assertEquals(Action.SUCCESS, loginAction.execute());
			user.setPassword("password1");
			System.out.println(loginAction.getActionErrors());
			Assert.assertEquals(Action.INPUT, loginAction.execute());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


现在到我们配置web.xml的时候了,到目前为止,它现在还是空的。
我们加上struts2的过滤器和spring的监听器。请看下面代码:
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
	<display-name>Common Login</display-name>
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispather.FilterDispatcher</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
</web-app>

分享到:
评论
1 楼 sunev_yu112112 2009-03-19  
哈哈 不错支持!!!!!!!!!!

相关推荐

Global site tag (gtag.js) - Google Analytics