Junit初级应用实例
Request:
public interface Request { String getName(); }
Response:
public interface Response { String getName(); }
RequestHandler:
public interface RequestHandler { Response process(Request request) throws Exception; }
Controller:
public interface Controller { Response processRequest(Request request); void addHandler(Request request, RequestHandler requestHandler); }
DefaultController:
import java.util.HashMap; import java.util.Map; public class DefaultController implements Controller{ /* 如果这个地方指明了RequestHandler的,可能会遇到一些泛型方面的问题。 指明了RequestHandler,我能够将RequestHandler的子类放进这个map 中么? 这个地方我忘了,估计那部分还需要再阅读一遍 */ private Map<String,RequestHandler> requestHandlers = new HashMap<String, RequestHandler>(); protected RequestHandler getHander(Request request) { if (!this.requestHandlers.containsKey(request.getName())) { String msg = "Can't find handler for request name."; throw new RuntimeException(msg); } return requestHandlers.get(request.getName()); } public Response processRequest(Request request) { Response response; try{ response = getHander(request).process(request); } catch (Exception e) { response = new ErrorResponse(request, e); } return response; } public void addHandler(Request request, RequestHandler requestHandler) { if (this.requestHandlers.containsKey(request.getName())) { String msg = "A request handler handler has "+ "already been registered for request "+ "["+request.getName()+"]."; throw new RuntimeException(msg); }else { requestHandlers.put(request.getName(), requestHandler); } } }
ErrorResponse:
public class ErrorResponse implements Response { private String name = "ErrorResponse"; private Request originalRequest; private Exception originalException; public ErrorResponse(Request originalRequest, Exception originalException) { this.originalRequest = originalRequest; this.originalException = originalException; } public Request getOriginalRequest() { return originalRequest; } public Exception getOriginalException() { return originalException; } public String getName() { return name; } }
DefaultControllerTest:
import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import static org.junit.Assert.*; public class DefaultControllerTest { private DefaultController controller; private Request request; private RequestHandler handler; @Before public void instantiate() throws Exception{ controller = new DefaultController(); request = new SimpleRequest(); handler = new SimpleRequestHandler(); controller.addHandler(request, handler); } @Test public void testAddHandler(){ RequestHandler handler2 = controller.getHander(request); assertSame("Should be same.",handler,handler2); } @Test public void testProcessRequest() { Response response = controller.processRequest(request); assertNotNull("Should not be null",response); assertEquals("shoue be same", new SimpleResponse(), response); } /* 书上这部分有点乱,我只能自己来设计各个测试了,前面已经完成了 诊断测试,现在主要完成各个异常测试: 1.测试addHandler方法抛出的异常 2.测试getHandler方法抛出的异常 3.测试process方法抛出的异常,由于process方法的异常 被DefaultController的processRequest方法给 捕获了,所以需要测试processRequest返回的错误 消息。 */ @Test public void testProcessAnswerErrorResponse(){ SimpleRequest request = new SimpleRequest("testError"); SimpleExceptionHandler handler = new SimpleExceptionHandler(); controller.addHandler(request,handler); Response response = controller.processRequest(request); assertNotNull("Should not be noll", response); assertEquals("Should be the same.", ErrorResponse.class,response.getClass()); } @Test(expected = RuntimeException.class) public void testGetHandlerNotDefined() { SimpleRequest request = new SimpleRequest("testNotDefined"); controller.getHander(request); } @Test(expected = RuntimeException.class) public void testAddHandlerDuplicateName() { SimpleRequest request = new SimpleRequest(); SimpleRequestHandler handler = new SimpleRequestHandler(); controller.addHandler(request,handler); } /* 测试超时 */ @Test(timeout = 130) @Ignore(value = "no need not.") public void testProcessMultipleRequestsTimeout() { Request request; Response simpleResponse = new SimpleResponse(); SimpleRequestHandler handler = new SimpleRequestHandler(); for (int i = 0; i < 99999; i++) { request = new SimpleRequest(); controller.addHandler(request, handler); simpleResponse = controller.processRequest(request); assertNotNull(simpleResponse); assertNotSame(ErrorResponse.class,simpleResponse.getClass()); } } private class SimpleRequest implements Request { private static final String NAME = "Test"; private String name; public SimpleRequest(String name) { this.name = name; } public SimpleRequest() { this(NAME); } public String getName() { return name; } } private class SimpleResponse implements Response { private static final String NAME = "Test"; public String getName() { return NAME; } @Override public boolean equals(Object obj) { boolean result = false; if (obj instanceof SimpleResponse) { result = ((SimpleResponse) obj).getName().equals(getName()); } return result; } @Override public int hashCode() { return NAME.hashCode(); } } private class SimpleRequestHandler implements RequestHandler { public Response process(Request request) throws Exception { return new SimpleResponse(); } } private class SimpleExceptionHandler implements RequestHandler { public Response process(Request request) throws Exception { String msg = "error processing request"; throw new Exception(msg); } } }
《Junit实战》笔记
Junit初级应用实例的更多相关文章
- Appium + junit 的简单实例
import static junit.framework.Assert.assertTrue; import static org.junit.Assert.*; import org.junit. ...
- Junit初级编码(二)探索JUnit核心
序,Junit测试是单元测试的一个框架,提供了很多方法,供我们快速开展单元测试.现在就让我们慢慢学习Junit单元测试框架 一.Junit的三个核心概念测试类.测试集.测试运行器 1 测试类 公共的, ...
- Junit初级编码(一)第一个Junit测试程序
序,Junit测试是单元测试的一个框架,提供了很多方法,供我们快速开展单元测试.目前最新版本JAR包为4.12,官网地址为http://junit.org/ 一.第一个Junit测试程序 1 去官网下 ...
- Junit单元测试的实例
进行单元测试的代码 package JunitTest; import org.junit.Test; public class Calculator { private static int res ...
- JUnit套件测试实例
“套件测试”是指捆绑了几个单元测试用例并运行起来.在JUnit中,@RunWith 和 @Suite 这两个注解是用来运行套件测试. 下面的例子演示这两个单元测试:JunitTest1 和 Junit ...
- Junit初级篇
@Test介绍 @Test是我们在写测试脚本时最常用到的,大部分情况下如果没用这个注解,一个方法就不能成为测试用例.如下代码是一个最普通的测试脚本: import org.junit.Assert; ...
- [python][flask][flask-SQLAlchemy]关于flask-SQLAlchemy的初级使用教程
鉴于网上关于flask-SQLAlchemy的实例使用教程参差不齐,于此写下工作学习过程中的使用过程,以便分享交流. 对于python关于flask有一定了解的高端玩家来说,请转至flask官方开发文 ...
- 菜鸟学Java(二十一)——怎样更好的进行单元測试——JUnit
測试在软件生命周期中的重要性,不用我多说想必大家也都很清楚.软件測试有许多分类,从測试的方法上可分为:黑盒測试.白盒測试.静态測试.动态測试等:从软件开发的过程分为:单元測试.集成測试.确认測试.验收 ...
- 1.如何在JMeter中使用JUnit
您是否需要在测试过程中使用JUnit? 要回答这个问题,我们先来看看单元测试. 单元测试是软件测试生命周期中测试的最低分辨率. 运行单元测试时,需要在应用程序中使用最小的可测试功能,将其与其他代码隔离 ...
随机推荐
- ARTS 12.10 - 12.14
从陈皓博主的专栏里学到一个概念,争取可以坚持下去: 我在我的读者群中推荐出 ARTS 的任务,每个人每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Sha ...
- Windows的远程协助和远程桌面的区别
在Windows的“系统属性-远程”里面,包含了“远程协助”和“远程桌面”两个设置. 远程桌面我们平时用得比较多,但是远程协助却一直没明白什么作用.系统装完以后,“远程协助 - 允许远程协助连接这台计 ...
- CLSRSC-400: A system reboot is required to continue installing.
I try to install oracle database 12c RAC on the RedHat 7.3,when I execute the script '/u01/app/12.2. ...
- ML:单变量线性回归(Linear Regression With One Variable)
模型表达(model regression) 用于描述回归问题的标记 m 训练集(training set)中实例的数量 x 特征/输入变量 y 目标变量/输出变量 (x,y) 训练集中的实例 (x( ...
- 去除文件属性(使用SetFileAttributes API函数)
FILE_ATTRIBUTE_ARCHIVE 文件存档(备份或移动时会对文件做标记).FILE_ATTRIBUTE_ENCRYPTED 加密(对文件来说是内容加密,对目录来说是对将来新建的文件默认为加 ...
- web.congfig 禁用 ViewState Session
<!--禁用 ViewState Session--> <pages enableViewState="false" enableSessionState=&qu ...
- Spring Cloud Ribbon配置详解
概述 有时候需要自定义Ribbon的配置和客户端超时配置. 自动化配置 /* 使用属性自定义功能区客户端 从版本1.2.0开始,Spring Cloud Netflix现在支持使用属性与Ribbon文 ...
- ABP开发框架前后端开发系列---(9)ABP框架的权限控制管理
在前面两篇随笔<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>和<ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程>开始 ...
- Spring boot中Spring-Data-JPA操作MySQL数据库时遇到的错误(一)
执行遇到如下错误: 看错误时要注意两点: 1.控制台报错情况,一般情况下红色第一行很重要,举例:上图info之下,蓝底标出的部分. 2.这种一般是以堆栈形式描述的,也就是重点在栈底的最后的一个完整的句 ...
- 【死磕线程】线程同步机制_java多线程之线程锁
1.线程各种状态间的切换,用图表示的话简单清晰: 图出处:https://www.cnblogs.com/bhlsheji/p/5099362.html(博主对每个状态解释的清晰明了) 2.为什么需要 ...