`

testng 读书笔记 servlet相关

    博客分类:
  • test
阅读更多

只有知道测试方法被调用的顺序时,共享可修改的状态才有意义

 只关注测试驱动开发将是程序员忽视大范围或中范围设计的实践

理想情况下,当您编写测试时,需要确保不论底层代码如何改动,这些测试仍然有效。    //在稍高的层面写测试?

如何创建测试不重要,重要的是确实要创建测试。

测试私有方法的方式就是利用反射   在method对象上调用setAccessible() 通知JVM跳过安全性检查

绝大多数时候, 可测试性应该胜过封装

第一点也是最重要的一点,就是尽量避免使用commons-logging。他是没有意义的,只是增加了复杂性。 page。276

 

 

测试servlet

@Test(testName="function test")
public class TestRequest {

    /**
     * 简单测试servlet 模拟出 request response
     * 对servelt执行前后的数据进行检查,没有检查out输出
     * 
     */
    @Test(groups = { "function" })
    public void testComputerServlet() throws ServletException, IOException {
        ComputerServlet cs = new ComputerServlet();
        MockServletContext application = new MockServletContext();
        MockServletConfig config = new MockServletConfig(application);
        cs.init(config);
        MockHttpServletRequest request = new MockHttpServletRequest();
        MockHttpServletResponse response = new MockHttpServletResponse();
        int a = 233, b = 23241;
        request.setParameter("num1", a+"");
        request.setParameter("num2", b+"");
        cs.doGet(request, response);
        int sum = Integer.valueOf((String) request.getAttribute("num3"));
        Assert.assertEquals(sum, a + b);

    }
}

 

 

==================================================================================

 

容器内testng测试

/**
 * 以一个servlet的形式执行testng测试
 * 这样的好处是这个servlet是在容器中运行的
 * 测试的环境和实际使用的生产环境是一样的(相比与容器外的测试)
 */
public class TestServlet extends HttpServlet {

    /**
     * The doGet method of the servlet. <br>
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    /**
     * The doPost method of the servlet. <br>
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        Runtime runtime = Runtime.getRuntime();
        out.println("totalMemory = " + runtime.totalMemory() / 1024.0 / 1024);// 看下测试对jvm内存的影响
        TestNG tester = new TestNG();
        tester.setDefaultSuiteName("container-tests");
        String root = request.getSession().getServletContext().getRealPath("/WEB-INF/classes");
        ClassScanner scanner = new ClassScanner(new File(root));
        scanner.setLoader(getClass().getClassLoader());
        scanner.setFilter(new FileFilter() {
            public boolean accept(File pathname) {
                return pathname.getPath().indexOf("Test") > -1;
            }
        });
        Class[] classesTobeTest = scanner.getClasses();
        tester.setTestClasses(classesTobeTest);
        IReporter reporter = new SinglePageReporter(out);
        tester.addListener(reporter);
        tester.run();
        System.out.println("totalMemory = " + Runtime.getRuntime().totalMemory() / 1024.0 / 1024);
        out.println("totalMemory = " + Runtime.getRuntime().totalMemory() / 1024.0 / 1024);
        out.println("===============");
        // out.close();
    }

}

 铺助类

public class SinglePageReporter extends EmailableReporter {
    private Writer writer;

    /**
     * 
     */
    public SinglePageReporter(Writer writer) {
        this.writer = writer;
    }

    @Override
    protected PrintWriter createWriter(String outdir) throws IOException {
        return new PrintWriter(writer);
    }

}

 

public class ClassScanner {
    private File root;
    private FileFilter filter;
    private ClassLoader loader;

    private static final Logger log = Logger.getLogger(ClassScanner.class);
    private static final String CLASS_EXT = ".class";

    /**
     * @param root
     */
    public ClassScanner(File root) {
        super();
        this.root = root;
    }

    public void setFilter(FileFilter filter) {
        this.filter = filter;
    }

    public void setLoader(ClassLoader loader) {
        this.loader = loader;
    }

    public Class[] getClasses() {
        List<Class> list = new ArrayList<Class>();
        loadClasses(list, root);
        return list.toArray(new Class[list.size()]);
    }

    /**
     * @param list
     * @param root2
     */
    private void loadClasses(List<Class> list, File dir) {
        if (dir == null || !dir.isDirectory()) {
            return;
        }
        File[] files = dir.listFiles();
        for (File file : files) {
            log.debug("scan "+file.getAbsolutePath());
            if (file.isDirectory()) {
                loadClasses(list, file);
            } else if (filter == null || filter.accept(file)) {
                if (file.getName().endsWith(CLASS_EXT)) {
                    int trim = root.toString().length();
                    String name = file.toString().substring(trim + 1);
                    name = name.substring(0, name.length() - CLASS_EXT.length());
                    name = name.replace(File.separatorChar, '.');
                    try {
                        Class clazz = loader == null ? Class.forName(name) : loader.loadClass(name);
                        log.info("loaded "+file.getAbsolutePath());
                        list.add(clazz);
                    } catch (Exception e) {
                        log.warn("error loading class " + name, e);
                    }
                }
            }
        }
    }

}

 

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="src" path="src"/>
	<classpathentry kind="src" path="test"/>
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
	<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.j2eedt.core.MYECLIPSE_JAVAEE_5_CONTAINER"/>
	<classpathentry kind="lib" path="WebRoot/WEB-INF/lib/testng-5.11-jdk15.jar"/>
	<classpathentry kind="lib" path="WebRoot/WEB-INF/lib/log4j-1.2.15.jar"/>
	<classpathentry kind="lib" path="WebRoot/WEB-INF/lib/spring-test.jar" sourcepath="D:/openSource/spring-framework-2.5.6/mock"/>
	<classpathentry kind="lib" path="WebRoot/WEB-INF/lib/spring.jar"/>
	<classpathentry kind="output" path="WebRoot/WEB-INF/classes"/>
</classpath

 

分享到:
评论

相关推荐

    Spring Framework Testing 读书笔记

    Spring Framework 的测试框架知识点 涵盖了 Unit Testing、Mock Objects、Environment、JNDI、Servlet API 和 Spring Web Reactive 等方面,提供了许多测试相关的功能和技术,可以帮助开发者更好地测试 Spring ...

    cactus的学习笔记(一)

    了解Cactus的工作方式后,你还可以深入研究它的高级特性,如模拟数据库操作、处理异常情况、集成其他测试框架(如TestNG)等。此外,Cactus还支持EJB、JSP、Struts等Web组件的测试,使得整个Web应用的测试覆盖更加...

    Java+JDK+6学习笔记.pdf

    - **Java EE**:企业版 Java 平台,主要用于开发大型企业级应用,支持 JSP、Servlet、EJB 等技术。 - **Java ME**:微版 Java 平台,用于开发小型设备上的应用程序,如移动电话、PDA 等。 #### 三、Java 平台介绍...

    Spring学习总结笔记

    - **Web**:包含Web、Servlet、Portlet和WebSocket模块,提供在Web环境下的应用支持。 - **AOP**:提供面向切面编程的功能,实现代码的解耦。 - **Instrumentation**:用于类装载时的工具和应用服务器特定的类。 ...

    SPBT 源码学习笔记 - spbt-0707-test-java-web

    【标签】"软件/插件 java" 显示这个主题与Java编程语言和相关的软件或插件有关。Java是一种广泛使用的面向对象的编程语言,尤其适合构建Web应用程序。这里的“插件”可能指的是用于增强或扩展Java Web功能的工具,如...

    J2EE学习笔记(J2ee初学者必备手册)

    13. **持续集成和自动化测试**:在Java EE开发中,使用工具如Maven、Gradle进行项目管理,以及JUnit和TestNG进行单元测试,是提升开发效率和保证质量的关键。 通过深入学习以上知识点,并结合实际项目实践,可以...

    Maven3实战笔记(全)

    6. **构建Web应用程序**:对于Web项目,Maven提供了war插件来打包Web应用为WAR文件,适用于部署到Servlet容器如Tomcat。同时,可以通过`&lt;war&gt;&lt;webResources&gt;`配置资源复制和过滤。 7. **多模块项目**:Maven支持多...

    Maven精品教程 零散笔记

    2. Maven单元测试命名要求:这是指单元测试在Maven项目中的命名规则,Maven默认会识别以Test结尾的测试类,并使用JUnit或TestNG框架进行测试执行。 3. 在Eclipse中配置Maven插件构建索引:这一知识点涉及在Eclipse...

    狂神 Spring5课堂笔记

    - **Web**:Web模块,包括Web和Web-Servlet两个子模块,用于支持Web应用开发。 - **Instrumentation**:用于支持Classloader级别的元数据注入,例如在Weblogic、Websphere等服务器上运行时。 - **Messaging**:...

    maven学习笔记

    4. `src/test/java`:这里存放的是项目的测试代码,通常使用JUnit、TestNG等测试框架编写的测试类。这些测试类用于验证项目功能的正确性。 5. `src/test/resources`:与主资源目录类似,测试资源文件存储在此处,供...

    关于Java相关代码,分享给大家

    其次,作为“软件/插件”标签的一部分,这个压缩包可能包含了一些自定义的Java工具或库,例如日志记录器、性能监控工具、自动化测试框架(如JUnit、TestNG)、代码分析工具(如SonarQube)等。这些工具在实际开发...

    《Java JDK6学习笔记》(中文ppt->pdf)

    - **Java EE** 提供了一系列服务、API 和协议,如 JSP、Servlet、Enterprise JavaBeans (EJB)、Java Remote Method Invocation (RMI) 等,这些技术共同构成了开发分布式、多层式、组件化和基于 Web 的应用程序的基础...

    Technical-Notes:Java笔记

    虽然描述中没有提供具体细节,但我们可以从Java这个主题出发,探讨一系列相关知识点。 1. **Java基础** - **语法**:包括变量、数据类型、运算符、控制结构(如if语句、switch语句、循环)、方法等。 - **类与...

    java-小和尚工作

    在IT行业中,Java是一...文件名“0927刘轩圻_小和尚工作.doc”可能是关于这些知识点的讲解或笔记,而“和尚little”可能指的是相关的练习项目或者案例分析。通过深入学习和实践,你可以逐步提升在Java领域的专业能力。

    物资管理系统项目源码.zip

    9. **单元测试与集成测试**: 使用JUnit或TestNG进行单元测试,确保代码的质量和功能的正确性。可能还使用了Mockito等工具进行模拟测试。 10. **文档说明**: "说明.pdf"可能是项目的设计文档或用户手册,包含了系统...

    BJ学习

    BJstudy-master这个目录很可能包含了Java学习的源代码、笔记、教程或其他相关材料。在Java学习过程中,有几个关键的知识点: 1. **基础语法**:包括变量、数据类型、运算符、控制流程(if语句、for循环、while循环...

    JavaStudy:该存储库用于存储韩明远的Java课程作业

    在JavaStudy-main这个目录下,可能包含了韩明远的项目源代码、测试文件、笔记或者相关的文档。源代码可能涉及了各种Java应用程序或服务的实现,比如命令行工具、GUI程序、Web应用后端或者Android应用。通过阅读和...

    PMM-2014-2015

    这个目录可能包含了源代码、文档、笔记、示例、测试用例等,帮助用户理解并参与到项目中。 在这样的项目中,我们可能可以期待以下知识点: 1. **项目管理基础**:涵盖项目生命周期、项目阶段、WBS(工作分解结构)...

    Webcamp_0806_1

    【标题】"Webcamp_0806_...这个压缩包可能包含上述各个主题的相关代码实例、笔记、PPT演示文稿等,帮助学习者深入理解Java在Web开发中的实践应用。通过这些资源,开发者可以提升自己的技能,了解最新的技术和最佳实践。

Global site tag (gtag.js) - Google Analytics