- 首先贴个异常先,
NoClassDefFoundError: org/junit/Assume$AssumptionViolatedException
下面是异常的截图:
莫慌,我出现这个的异常是因为spring版本是2.5.x的而myeclipse10自带的JUnit是4.8版本的,不兼容,会报异常,解决方法是把JUnit的版本改到
4.4(4.3应该也可以)把原来的JUnit从Build Path里去掉手动添加junit4.4的jar包,我已经分享到优快云的下载资源中,JUnit4.4下载,将解压后里
面的junit4.4.jar手动添加到lib中去,或者用Build Path添加也可以。这样就不会报这个异常了。未完待续……先睡觉了,
- 测试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);
}
}
2.测试DAO层
遇到问题:
错误提示没有在spring配置文件中为Book类添加bean,我们把它加上。
<bean id="book" class="com.book.entity.Book" />
这里是一个数据库查找的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<Book> list=(List)bookDAO.findObjects(key, value);
for(Book b:list){
assertEquals(expBookname,b.getBookname());
}
}
}
这样接下去类似地做就能顺利完成对数据库CRUD测试了。