文档章节

goja框架model和controller测试

 大海无量1
发布于 2016/09/30 15:24
字数 559
阅读 19
收藏 0

最近在研究model/controller单元测试的问题。

一model测试还好,只要编写测试类 继承ModelTestCase,在此类中的测试方法前加上@Test就可以运行。

二controller测试比较麻烦 当前goja-test中的ControllerTestCase 有泛型检查 ,但是编写测试类继承它的时候有没有泛型参数要加,所以我自己拷贝一份ControllerTestCase 把泛型检查去除了,再运行此类中的测试方法 会在jfinal关闭的时候提示空指针异常 检查发现Cache中cacheimpl没有初始化,又在我的ControllerTestCase中添加Cache.init()代码,重新运行ok。

附上代码:

/*---------------------ControllerTestCase-------------*/

package com.zfdzchina.mytest;

import com.google.common.base.Charsets;
import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
import com.google.common.base.Throwables;
import com.google.common.io.Files;
import com.jfinal.config.JFinalConfig;
import com.jfinal.core.JFinal;
import com.jfinal.handler.Handler;
import goja.Goja;
import goja.core.app.GojaConfig;
import goja.core.cache.Cache;
import goja.core.kits.reflect.Reflect;
import goja.initialize.ctxbox.ClassFinder;
import goja.test.mock.MockHttpRequest;
import goja.test.mock.MockHttpResponse;
import goja.test.mock.MockServletContext;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import javax.servlet.ServletContext;
import org.junit.AfterClass;
import org.junit.Before;

public abstract class ControllerTestCase {
    protected static ServletContext servletContext = new MockServletContext();
    protected static MockHttpRequest request;
    protected static MockHttpResponse response;
    protected static Handler handler;
    private static boolean configStarted = false;
    private static JFinalConfig configInstance;
    private String actionUrl;
    private String bodyData;
    private File bodyFile;
    private File responseFile;
    private Class<Goja> config;

    public ControllerTestCase() {
        Type genericSuperclass = this.getClass().getGenericSuperclass();
        this.config = Goja.class;
    }

    private static void initConfig(JFinal me, ServletContext servletContext, JFinalConfig config) {
        Reflect.on(me).call("init", new Object[]{config, servletContext});
    }

    public static void start(Class<Goja> configClass) throws Exception {
        if(!configStarted) {
            GojaConfig.init();
            ClassFinder.findWithTest();
            Reflect.on(Goja.class).call("initWithTest");
            JFinal me = JFinal.me();
            configInstance = (JFinalConfig)configClass.newInstance();
            initConfig(me, servletContext, configInstance);
            handler = (Handler)Reflect.on(me).get("handler");
            configStarted = true;
            configInstance.afterJFinalStart();
            Cache.init();
        }
    }

    @AfterClass
    public static void stop() throws Exception {
        configInstance.beforeJFinalStop();
    }

    public Object findAttrAfterInvoke(String key) {
        return request.getAttribute(key);
    }

    private String getTarget(String url, MockHttpRequest request) {
        String target = url;
        if(url.contains("?")) {
            target = url.substring(0, url.indexOf("?"));
            String queryString = url.substring(url.indexOf("?") + 1);
            String[] keyVals = queryString.split("&");
            String[] arr$ = keyVals;
            int len$ = keyVals.length;

            for(int i$ = 0; i$ < len$; ++i$) {
                String keyVal = arr$[i$];
                int i = keyVal.indexOf(61);
                String key = keyVal.substring(0, i);
                String val = keyVal.substring(i + 1);
                request.setParameter(key, val);
            }
        }

        return target;
    }

    @Before
    public void init() throws Exception {
        start(this.config);
    }

    public String invoke() {
        if(this.bodyFile != null) {
            List resp = null;

            try {
                resp = Files.readLines(this.bodyFile, Charsets.UTF_8);
            } catch (IOException var5) {
                Throwables.propagate(var5);
            }

            this.bodyData = Joiner.on("").join(resp);
        }

        StringWriter resp1 = new StringWriter();
        request = new MockHttpRequest(this.bodyData);
        response = new MockHttpResponse(resp1);
        Reflect.on(handler).call("handle", new Object[]{this.getTarget(this.actionUrl, request), request, response, new boolean[]{true}});
        String response = resp1.toString();
        if(this.responseFile != null) {
            try {
                Files.write(response, this.responseFile, Charsets.UTF_8);
            } catch (IOException var4) {
                Throwables.propagate(var4);
            }
        }

        return response;
    }

    public ControllerTestCase post(File bodyFile) {
        this.bodyFile = bodyFile;
        return this;
    }

    public ControllerTestCase post(String bodyData) {
        this.bodyData = bodyData;
        return this;
    }

    public ControllerTestCase use(String actionUrl) {
        this.actionUrl = actionUrl;
        return this;
    }

    public ControllerTestCase writeTo(File responseFile) {
        this.responseFile = responseFile;
        return this;
    }
}

/*-----------------------------我的测试类------------------------*/

public class ControllerTest extends ControllerTestCase {
    @Test
    public void test()
    {
        String result = use("/myctrl/area/province").invoke();
        System.out.println(result);
        TestCase.assertNotNull(result);
    }

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 1
码字总数 559
作品 0
合肥
程序员
私信 提问
ControllerTestCase 测试

@SogYF 你好,想跟你请教个问题: goja-test包中的ControllerTestCase测试要怎么用?简单继承的话,会提示: Your ControllerTestCase must have genericType...

大海无量1
2016/09/13
51
0
MVVM(微软的WPF基础)-MVC(常用模型/设计)-WPF(微软.NETFramework3.0

最近看 好多人说IOS MVC 过时了 要用MVVM 什么什么的,感觉 很新奇,就去搜了一下,发现原来所谓的MVVM就是 之前微软在10年左右就推出的WPF ,鄙人不才,搞过两年多的C#开发,因此 做了下比较...

RainOrz
2015/08/17
0
7
JFinal Application--GoJa

Goja Framework 有如下特性: 在 JFinal 基础上,参考Play 1.2配置方式,将大部分的配置整合到一个配置文件,并支持动态启动相关插件等; 需要使用JDK-1.7 以及 Servlet 3.0 以上版本; 通过...

SogYF
2014/02/17
2.9K
0
被误解的MVC和被神化的MVVM

被误解的 MVCMVC 的历史 MVC,全称是 Model View Controller,是模型 (model)-视图 (view)-控制器 (controller) 的缩写。它表示的是一种常见的客户端软件开发框架。 MVC 的概念最早出现在二...

刘波100
2016/08/22
7
0
ASP.NET MVC 认识

之前我不认识什么是mvc框架,我就在网上查找,我找到了一篇很好的文章,我看了之后就看懂了,通过这次小小的分享希望能帮到你! ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建...

myy629464
2017/12/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊我怎么系统学习Linux技能并快速提高的

聊聊我怎么系统学习Linux技能并快速提高的 随着电子信息科技时代的发展,学会使用计算机在我们的生活中成为了必不可少的一项技能。而作为计算机中的三大操作系统之一的Linux更是饱受计算机爱...

linuxCool
50分钟前
3
0
Android/Java 获取一个byte[]的真实编码,用于解决乱码问题

来源地址:https://blog.csdn.net/qq_31384551/article/details/81627840 一个byte数组,byte[] buf,是由一个字符串转换来的,如何判断字符串使用的是什么编码? Mozilla的一个组件提供了相应...

她叫我小渝
58分钟前
6
0
使用spring-retry实现重试机制

我们经常会遇到一些场景,需要重试当前的操作,比如:文件上传失败,重新上传;微信accesstoken获取失败,重新获取等等的场景问题。那么今天就说一种可以实现此种机制的工具包:spring-retr...

哥本哈根的小哥
今天
0
0
kubernetes notes

Error from server (ServerTimeout): error when creating "mysql.yaml": No API token found for service account "default", retry after the token is automatically created and added t......

kut
今天
2
0
代理模式---静态代理

package com.atguigu.java; //接口的应用:代理模式---静态代理。 public class ProxyTest { public static void main(String[] args) { NetWork work = new RealServer(); ProxyServer pro......

architect刘源源
今天
2
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部