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
		銷燬

	 */
	
}

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層

測試登錄模塊的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可以根據狀態來查看

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章