gradle - 简单测试驱动web程序

来源:互联网 发布:mac制作win10启动u盘 编辑:程序博客网 时间:2024/05/10 14:47
# 平台 ubuntu linux
# 工程名称(顶级目录名)tdd
# 使用到的jar包
servlet-api.jar
org.springframework.core-3.0.4.RELEASE.jar
commons-logging-1.0.4.jar
spring-mock.jar

一、实现一个基于servlet以纯文本回显请求参数的例子。
1)编写EchoServlet代码
因为需要用到gradle来实现自动化构建,所以遵循gradle中java工程的目录约定。
> mkdir -p src/main/java/com/thoughtworks/servlet> cd src/main/java/com/thoughtworks/servlet> touch EchoServlet.java
    package com.thoughtworks.servlet;    import java.io.IOException;    import java.io.PrintWriter;    import java.util.Enumeration;    import javax.servlet.ServletException;    import javax.servlet.http.HttpServlet;    import javax.servlet.http.HttpServletRequest;    import javax.servlet.http.HttpServletResponse;    public class EchoServlet  extends HttpServlet{            @Override        public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {            response.setHeader("Content-Type", "text/plain"); //设置纯文本响应头            PrintWriter writer = response.getWriter();            Enumeration e = request.getParameterNames();      // 获取请求参数名            while(e.hasMoreElements()) {                String name = String.valueOf(e.nextElement());                String[] values = request.getParameterValues(name);                for(String v : values) {                    writer.write(name+"="+v);                    writer.write("\n");                }            }            writer.close();        }    }

2)编写EchoServlet单元测试用例
遵循gradle标准,故:
> mkdir -p src/test/java/com/thoughtworks/servlet/> cd src/test/java/com/thoughtworks/servlet/> touch EchoServletTest.java
    package com.thoughtworks.servlet;    import static org.junit.Assert.*;    import org.junit.Test;    import org.springframework.mock.web.MockHttpServletRequest;    import org.springframework.mock.web.MockHttpServletResponse;    public class EchoServletTest {            @Test        public void testEchoingParametersWithMultipleValues() throws Exception {            MockHttpServletRequest request = new MockHttpServletRequest();            MockHttpServletResponse response = new MockHttpServletResponse();                    request.addParameter("param1", "value1");            request.addParameter("param2", "value2");            request.addParameter("param3", "value3");                    new EchoServlet().doGet(request, response);                    String[] lines = response.getContentAsString().split("\n");                    assertEquals("Expected as many lines as We have parameter values",                    3, lines.length);            assertEquals("param1=value1", lines[0]);            assertEquals("param2=value2", lines[1]);            assertEquals("param3=value3", lines[2]);                }    }

3)编写gradle的配置文件 build.gradle

    apply plugin: 'idea'    apply plugin: 'java'    repositories {        mavenCentral()    }    dependencies {        compile fileTree(dir: 'libs', include: '*.jar')        testCompile 'junit:junit:4.11'    }

以上代码使用可参考我的blog《gradle-使用介绍(一)》http://blog.csdn.net/why3query/article/details/15028313

这里dir: 'libs'加载本地的jar文件
> mkdir libs
然后将开头处提及的jar包放到libs目录下。

4) 运行gradle命令
> gradle build.gradle:compileJava UP-TO-DATE:processResources UP-TO-DATE:classes UP-TO-DATE:jar UP-TO-DATE:assemble UP-TO-DATE:compileTestJava UP-TO-DATE:processTestResources UP-TO-DATE:testClasses UP-TO-DATE:test UP-TO-DATE:check UP-TO-DATE:build UP-TO-DATEBUILD SUCCESSFULTotal time: 7.091 secs


生成和src/同级的build目录
build/
    |- classes/
    |- dependency-cache/
    |- libs/
    |- reports/
    |- test-results/
    |- tmp/

这里注意apply plugin: 'idea'
指的是可以构建IntelliJ的idea工程。
> gradle idea
生成三个文件和一个目录
tdd.iml
tdd.ipr
tdd.iws
out/
    |- production/
    |- test/

之后可以通过IntelliJ open选项打开tdd工程。
到此就完成了使用gradle自动化构建servlet请求参数以文本形式回显的java工程。