SSH框架下用JUnit和spring-test和EasyMock单元测试


  1. 首先贴个异常先,
    NoClassDefFoundError: org/junit/Assume$AssumptionViolatedException

    下面是异常的截图:
SSH框架下用JUnit和spring-test和EasyMock单元测试_第1张图片

莫慌,我出现这个的异常是因为spring版本是2.5.x的而myeclipse10自带的JUnit是4.8版本的,不兼容,会报异常,解决方法是把JUnit的版本改到

4.4(4.3应该也可以)把原来的JUnit从Build Path里去掉手动添加junit4.4的jar包,我已经分享到CSDN的下载资源中,JUnit4.4下载,将解压后里

面的junit4.4.jar手动添加到lib中去,或者用Build Path添加也可以。这样就不会报这个异常了。未完待续……先睡觉了,

  1. 测试Action层

用Junit和EasyMock测试注册用例说明及结果截图

1.  没有相同用户名,可以用该用户名注册

说明:为需要调用的IuserService接口实例创建mock对象,并模拟返回find(查找数据库中是否同名)结果为null,即数据库中

无该用户名,可以注册

package com.user.action;

import static org.junit.Assert.*;
import com.user.entity.User;
import com.user.service.IUserService;
import com.user.dao.UserDAO;
import org.junit.Test;
import org.easymock.EasyMock;
import org.junit.runner.RunWith;

/*import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(locations = "classpath:beans.xml")*/
public class RegisterTest {
	/**
	 * @param args
	 */

	/*
	 * @Autowired
	 * 
	 * @Qualifier("user")
	 */
	private User user = new User();
	/*
	 * @Autowired
	 * 
	 * @Qualifier("userDAO")
	 */
	private UserDAO userDAO;
	/*
	 * @Autowired
	 * 
	 * @Qualifier("userService")
	 */
	private IUserService userService;
	private RegistAction registAction = new RegistAction();

	static String username = "louzhefeng";
	static String password = "pass";
	static String name = "louzhefeng";
	static int age = 12;
	static String address = "小和山";

	public RegisterTest() {

	}

	// getUsername测试用例
	@Test
	public void testGetUsername() {
		User user2 = new User();
		String name1 = "haha";
		user.setUsername(username);
		String expResult = "louzhefeng";
		String result = user.getUsername();
		assertEquals(expResult, result);

	}

	// 使用EasyMock和JUnit测试注册用例的Action层
	@Test
	public void testRegister() {
		User user1 = null; // 表示查找不到相同用户名,可以用该用户名注册
		//User user1=new User();
		IUserService mock = EasyMock.createMock(IUserService.class);// 为IUserService创建mock对象
		EasyMock.expect(mock.find("username", username)).andReturn(user1);// find方法表示查找数据库中是否已有该用户名
		User user3 = new User();
		mock.create(user3);// regist方法中需要执行,必须放在replay(mock)之前!!
		EasyMock.replay(mock);
		user3.setUsername(username);
		registAction.setUser(user3);
		registAction.setUserService(mock);// 将mock对象set进来
		String result = registAction.regist();
		String expResult = "regist";
		assertEquals(expResult, result);
	}
}


SSH框架下用JUnit和spring-test和EasyMock单元测试_第2张图片

  

2.测试DAO层

遇到问题:

SSH框架下用JUnit和spring-test和EasyMock单元测试_第3张图片

错误提示没有在spring配置文件中为Book类添加bean,我们把它加上。


这里是一个数据库查找的DAO,设置查询条件为根据“author”查找,然后设置作者参数为“安得”,然后用spring-test配置的bookDAO模拟数据库查询。

如果返回图书书名为“安德的游戏”则表示测试成功。

测试代码:

package com.book.dao;

import java.util.List;

import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;//需要用到事务管理(比如要在测试结果出来之后回滚测试内容)时可以使用
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import com.book.entity.Book;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:beans.xml")
public class TestBookDAO extends
AbstractJUnit4SpringContextTests {
	public TestBookDAO(){
		
	}
	@Autowired
	@Qualifier("book")
	private Book book;
	@Autowired
	@Qualifier("bookDAO")
	private BookDAO bookDAO;

    @Test
	public void testFind(){
		String key="author";
		String value="安得";
		String expBookname="安德的游戏";
		List list=(List)bookDAO.findObjects(key, value);
		for(Book b:list){
			assertEquals(expBookname,b.getBookname());
		}
	}
}


测试通过截图

SSH框架下用JUnit和spring-test和EasyMock单元测试_第4张图片

这样接下去类似地做就能顺利完成对数据库CRUD测试了。

你可能感兴趣的:(Java,SSH)