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