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? 要回答这个问题,我们先来看看单元测试. 单元测试是软件测试生命周期中测试的最低分辨率. 运行单元测试时,需要在应用程序中使用最小的可测试功能,将其与其他代码隔离 ...
随机推荐
- shell中特殊变量及if条件
特殊变量: linux中shell变量$#,$@,$,$,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? ...
- Android动画基础——属性动画(Property Animation)
本篇涉及例子下载:Github 本篇讲android 3.0引入的属性动画框架,上篇写视图动画View Animation时就说过ViewAnimation的缺点,那就是动画作用的是view本身的视觉 ...
- =WM_VSCROLL(消息反射) 和 WM_VSCROLL(消息响应)的区别(控件拥有者自己不处这个理消息,而是反射给控件对象本身来处理这个消息)
=WM_VSCROLL(消息反射) 和 WM_VSCROLL(消息响应)的区别 所谓消息反射就是控件拥有者自己不处这个理消息,而是反射给控件对象本身来处理这个消息 1.“=WM_VSCROLL”是消息 ...
- 使用.NET进行高效率互联网敏捷开发的思考和探索【一、概述】
不知从什么时候开始,创业变得很廉价,谈什么都是互联网,动辄融资千万.这阵风好像也刮向了程序员中,有那么一大批开发者,数据结构不好好学习.数据库原理不扎实掌握,在github上发布几个项目,用nodej ...
- qt中如何用qDebug输出彩色调试信息
原文 http://fanzhichao.blog.hexun.com/22330640_d.html 在终端输出彩色信息有点类似于html的语法,即在要输出的文字前加上转义字符. 指令格式如下\03 ...
- APP导航设计九法
近期在设计APP原型,用EXCEL,用Axure.但无论工具如何,产品本身的界面布局和交互设计确实逃不掉的!网络中有关于APP导航设计的总结: 第一种:app标签导航 易用性:★★★★★ 趣味性 ...
- SYN2306型 北斗串口时间服务器
SYN2306型 北斗串口时间服务器 北斗授时设备北斗时钟同步系统使用说明视频链接: http://www.syn029.com/h-pd-108-0_310_36_-1.html 请将此链接复制 ...
- kafka 0.11.0.3 源码编译
首先下载 kafka 0.11.0.3 版本 源码: http://mirrors.hust.edu.cn/apache/kafka/0.11.0.3/ 下载源码 首先安装 gradle,不再说明 1 ...
- ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程
在前面随笔介绍的<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>里面,介绍了如何改进和完善审计日志和登录日志的应用服务端和Winform客户端,由于篇幅限制,没有进 ...
- Hexo+NexT(零):最全Hexo+Next搭建博客教程
快速.简洁且高效的博客框架 有位大神说,喜欢写博客的人的人,折腾博客会经历三个阶段.找到一个免费空间,搭建一个博客,很欣喜,很有成就感,此为一阶段:受限免费空间各种限制,自己买空间和域名,实现对博客的 ...