spring-test和junit下载
使用
@Test @Before @After三个注解的使用
package org.anonymous.note.dao.test.imple;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class TestDemo {
/**
* 每个测试方法开始测试的时候都会初始化
*/
@Before
public void init(){
System.out.println("初始化....");
}
/**
* 每一个测试方法结束的时候.销毁都会调用此方法
*/
@After
public void destory(){
System.out.println("销毁");
}
//带@Test都是测试方法
@Test
public void test1(){
System.out.println("测试1");
}
@Test
public void test2(){
System.out.println("测试2");
}
/**
* 结果:
* 初始化....
测试2
销毁
初始化....
测试1
销毁
*/
}
Runs:表示测试的方法个数
Errors:表示错误点可以在Failure Trace中查看..控制台查看不了
Failures:表示业务逻辑是否正确
右边的状态栏..如果是绿色是正常..没有什么问题,
同时执行所有的带@Test的方法/在不同的类与类之间
注解使用
@RunWith(Suite.class)
@SuiteClasses({测试类类名1.class,...,测试类类名n.class})
package org.anonymous.note.dao.test.imple;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({TestDemo.class,TestClass.class})
public class RunWites {
}
测试登录模块的Service
@Resource
private UserDao userDao;
/**
* 登录模块业务处理
*/
@Override
public NoteResult checkLogin(
String username, String password) throws Exception {
NoteResult result = new NoteResult();
User user = userDao.findByName(username);
if(user==null){
result.setStatus(1);
result.setMsg("用户名不存在");
return result;
}
//对用户的密码进行加密
String md5_base64_password = NoteUtil.md5_base64(password);
if(!user.getCn_user_password().equals(md5_base64_password)){
result.setStatus(2);
result.setMsg("密码不正确");
return result;
}
result.setStatus(0);
result.setMsg("用户名和密码正确!");
result.setData(user.getCn_user_id());
return result;
}
测试类
package org.anonymous.note.dao.test.imple;
import javax.annotation.Resource;
import org.anonymous.note.dao.UserDao;
import org.anonymous.note.entiry.NoteResult;
import org.anonymous.note.service.UserService;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestService {
@Resource
private UserDao userDao;
private UserService userService ;
@Before
public void init(){
ApplicationContext context =
new ClassPathXmlApplicationContext(
"applicationContext.xml");
userService = context.getBean(
"userServiceImple",UserService.class);
}
@Test
public void test1() throws Exception{
NoteResult result =
userService.checkLogin("demo", "1234");
//验证返回的结果是否正确,也就是业务逻辑是否正确
Assert.assertEquals(0, result.getStatus());
}
@Test
public void test2() throws Exception{
NoteResult result =
userService.checkLogin("demo", "23");
//验证返回的结果是否正确,也就是业务逻辑是否正确
Assert.assertEquals(2, result.getStatus());
}
@Test
public void test3() throws Exception{
NoteResult result =
userService.checkLogin("demo23", "123445");
//验证返回的结果是否正确,也就是业务逻辑是否正确
Assert.assertEquals(1, result.getStatus());
}
}
Junit控制台(结果没有逻辑错误或者是报错)
现在我将Test1中的Assert.assertEquals(0, result.getStatus());改为Assert.assertEquals(1, result.getStatus());
就会出现逻辑错误
原因:结果的返回的值是0..你程序员给的值是1..两个值程序判断错误,就会出现逻辑错误
例子:
加入A商品=10000 如今要打折处理打折0.7
也就是A商品=7000
进行业务逻辑处理的时候
Assert.assertEquals(7000, 商品打折之后的价格);
两这进行比较,,.如果不相同.就会出现业务逻辑错误..
相比以前.我们是用控制台进行查看验证,现在使用JUnit可以根据状态来查看
固定格式:
@RunWith(SpringJUnit4ClassRunner.class)//加运行类加入容器中
@ContextConfiguration(
locations={"classpath:applicationContext.xml"})//指定配置文件
package org.anonymous.note.dao.test.imple;
import javax.annotation.Resource;
import junit.framework.Assert;
import org.anonymous.note.controller.user.LoginController;
import org.anonymous.note.entiry.NoteResult;
import org.anonymous.note.service.UserService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import com.fasterxml.jackson.databind.ObjectMapper;
@RunWith(SpringJUnit4ClassRunner.class)//加运行类加入容器中
@ContextConfiguration(
locations={"classpath:applicationContext.xml"})//指定配置文件
public class TestController {
@Resource
private LoginController loginController;
private MockMvc mockmvc;
@Before
public void init(){
mockmvc = MockMvcBuilders.standaloneSetup(
loginController).build();
}
@Test
public void test1() throws Exception{
//发送请求
MockHttpServletRequestBuilder requestBuilder =
MockMvcRequestBuilders.post("/user/login.do");
//发送请求参数
requestBuilder.param("username", "demo").param("password","1234" );
//发送请求.获取请求返回的结果
MvcResult result = mockmvc.perform(requestBuilder).andReturn();
String content = result.getResponse()
.getContentAsString();
System.out.println(content);
/**
* 到这里就是获取到响应的结果了
* {"status":0,
* "msg":"用户名和密码正确!",
* "data":"48595f52-b22c-4485-9244-f4004255b972"}
* 怎么是一个JSON数据?
* 这里就要将JSON数据转换为NoteResult对象
*/
//为了断言.将JSON数据转换为NoteResult对象
ObjectMapper mapper = new ObjectMapper();
//将JSON转换为NoteResult
NoteResult note =
mapper.readValue(content, NoteResult.class);
Assert.assertEquals(0, note.getStatus());
}
}