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