Spring中的测试Service和Controller方式

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
		销毁

	 */
	
}

Spring中的测试Service和Controller方式_第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 {

}


Spring中的测试Service和Controller方式_第2张图片


测试Service层

测试登录模块的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());
	}
}

Spring中的测试Service和Controller方式_第3张图片

Junit控制台(结果没有逻辑错误或者是报错)

现在我将Test1中的Assert.assertEquals(0, result.getStatus());改为Assert.assertEquals(1, result.getStatus());

就会出现逻辑错误

Spring中的测试Service和Controller方式_第4张图片

原因:结果的返回的值是0..你程序员给的值是1..两个值程序判断错误,就会出现逻辑错误

例子:

加入A商品=10000    如今要打折处理打折0.7

也就是A商品=7000

进行业务逻辑处理的时候

Assert.assertEquals(7000, 商品打折之后的价格);

两这进行比较,,.如果不相同.就会出现业务逻辑错误..

相比以前.我们是用控制台进行查看验证,现在使用JUnit可以根据状态来查看

测试Controller层

固定格式:

@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());
	}
}

Spring中的测试Service和Controller方式_第5张图片

你可能感兴趣的:(JAVA进阶)