`
jzhua2006
  • 浏览: 304554 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论
阅读更多

几个常用注释

 

@Before   被它注释的方法,在每个测试方法运行之前都要执行

 

@After     @Before相对,被它注释的方法,在每个测试方法运行之后执行

 

上述两个注释,它们是方法级别的,因为每个测试方法的运行前后,都会触发它们的执行。因此,有影响效率的嫌疑

 

这两类方法,都用public void 修饰,而且不能带有任何参数,命名随便

 

 view plaincopy to clipboardprint?

@Before 

public void setBeforeMethod()  

{  

}  

 

@After 

public void seAfterMethod()  

{  

} 

 @Before

 public void setBeforeMethod()

 {

 }

 

 @After

 public void seAfterMethod()

 {

 }

 

 

@BeforeClass   被它注释的方法,在该类中的测试方法运行之前刚好运行一次

 

@AfterClass     被它注释的方法,都将在该类中的所有测试都运行之后刚好运行一次

 

上述两个注释,是类级别的,对一个类来说,就执行一次

 

这两类方法,都用public static void 修饰,而且不能带有任何参数,命名随便

 

view plaincopy to clipboardprint?

@BeforeClass 

 public static void setBeforeClass()  

 {  

 }  

 

 @AfterClass 

 public static void setAfterClass()  

 {  

 } 

@BeforeClass

 public static void setBeforeClass()

 {

 }

 

 @AfterClass

 public static void setAfterClass()

 {

 }

 

 

上面的四个注释,用于:为测试方法的执行,做一些准备工作和销毁工作。

 

@Test   被它注释的方法,就是测试方法

 

@Test(expected=XXXException.class)    异常测试,若该异常XXXException没有抛出,或抛出另一个异常,则测试失败

 

@Test(timeout=500)    可以帮助进行性能测试,为方法运行设置时间限制,单位毫秒,过时未完成则认为失败

 

测试方法,都用public void 修饰,而且不能带有任何参数,命名随便

 

 view plaincopy to clipboardprint?

@Test 

 public void testToString1()  

 {  

  Example1 e = new Example1();  

  Assert.assertEquals("snoopy:0", e.toString());  

 }  

 

@Test(expected = java.lang.ArithmeticException.class)  

 public void test()  

 {  

  int i = 0;  

  int j = 2;  

  int r = j / i;  

 }  

 

@Test(timeout = 2)  

 public void test()  

 {  

  int r = 1;  

  for(int i = 0; i < 100; i ++ )  

  {  

   r *= 2;  

  }  

 } 

@Test

 public void testToString1()

 {

  Example1 e = new Example1();

  Assert.assertEquals("snoopy:0", e.toString());

 }

 

@Test(expected = java.lang.ArithmeticException.class)

 public void test()

 {

  int i = 0;

  int j = 2;

  int r = j / i;

 }

 

@Test(timeout = 2)

 public void test()

 {

  int r = 1;

  for(int i = 0; i < 100; i ++ )

  {

   r *= 2;

  }

 }

 

@Ignore  跳过该方法,不执行(忽略,只是权宜之计,如果写了一个方法,一直忽略,那就要考虑干嘛写它了)

 

 view plaincopy to clipboardprint?

// @Ignore  

@Ignore(".. because of ...")  

@Test 

public void testToString1()  

{  

    Example1 e = new Example1();  

    Assert.assertEquals("snoopy:0", e.toString());  

} 

 

 

 

私有方法的单元测试

 

public方法的测试,相对要容易些,获取对象实例,调用public方法,就可以了。

 

protected方法的测试,可以通过建立一个与被测类同包名的测试类来解决。

 

private方法的测试,稍微麻烦些。

 

私有方法的测试,一般是采用发射的原理进行。

 

可以自己手动编写这一反射过程,如:

 

 view plaincopy to clipboardprint?

package application;  

//待测试类  

public class Example1  

{  

    public void print(int i, int j)  

    {  

        System.out.println(sum(i, j));  

    }  

    private int sum(int i, int j)  

    {  

        return i + j;  

    }  

} 

package application;

//待测试类

public class Example1

{

         public void print(int i, int j)

         {

                   System.out.println(sum(i, j));

         }

         private int sum(int i, int j)

         {

                   return i + j;

         }

}

 

手动编写利用反射特性,完成对私有方法的测试:

 

 view plaincopy to clipboardprint?

package application;  

 

import java.lang.reflect.Method;  

import junit.framework.Assert;  

import org.junit.Test;  

 

public class Example1Test  

{  

    @Test 

    public void testSum()  

    {  

        try 

        {  

            Class clazz = Class.forName("application.Example1");  

            Example1 instance = (Example1) clazz.newInstance();  

            Class [] args = new Class []{ int.class, int.class };  

            Method sum = instance.getClass().getDeclaredMethod("sum", args);  

            sum.setAccessible(true);  

            Assert.assertEquals(2, sum.invoke(instance, 1, 1));  

        }  

        catch(Exception e)  

        {  

            e.printStackTrace();  

        }  

    }  

} 

package application;

 

import java.lang.reflect.Method;

import junit.framework.Assert;

import org.junit.Test;

 

public class Example1Test

{

         @Test

         public void testSum()

         {

                   try

                   {

                            Class clazz = Class.forName("application.Example1");

                            Example1 instance = (Example1) clazz.newInstance();

                            Class [] args = new Class []{ int.class, int.class };

                            Method sum = instance.getClass().getDeclaredMethod("sum", args);

                            sum.setAccessible(true);

                            Assert.assertEquals(2, sum.invoke(instance, 1, 1));

                   }

                   catch(Exception e)

                   {

                            e.printStackTrace();

                   }

         }

}

 

除了自己手动编写外,我在网上找到了一个,可以帮助我们完成私有方法测试的小框架,其底层原理还是反射:

 

提供该framework的网站,包括下载、简介之类的信息  http://code.google.com/p/accessive/

 

 view plaincopy to clipboardprint?

package application;  

//待测试的类  

public class Example2  

{  

    private int age;  

    private String name;  

 

    public Example2(int age, String name)  

    {  

        this.age = age;  

        this.name = name;  

    }  

 

    private String tostring()  

    {  

        return tostring(this.age, this.name);  

    }  

 

    private String tostring(int age, String name)  

    {  

        return name + " : " + age;  

    }  

} 

package application;

//待测试的类

public class Example2

{

         private int age;

         private String name;

 

         public Example2(int age, String name)

         {

                   this.age = age;

                   this.name = name;

         }

 

         private String tostring()

         {

                   return tostring(this.age, this.name);

         }

 

         private String tostring(int age, String name)

         {

                   return name + " : " + age;

         }

}

 

 

使用accessive小框架

 

 view plaincopy to clipboardprint?

package application;  

 

import junit.framework.Assert;  

 

import org.junit.BeforeClass;  

import org.junit.Test;  

 

import com.j2speed.accessor.FieldAccessor;  

import com.j2speed.accessor.MethodAccessor;  

 

public class Example2Test  

{  

    private static Example2 instance;  

 

    @BeforeClass 

    public static void init()  

    {  

        instance = new Example2(12, "Sufie");  

    }  

 

    // 访问私有变量  

    @Test 

    public void testField()  

    {  

        FieldAccessor < Example2, Integer > ageInt =

分享到:
评论

相关推荐

    Junit4使用方法

    JUnit4 使用方法 ...小结 JUnit4 是一个功能强大且灵活的测试框架,提供了许多实用的测试工具和断言方法。通过学习 JUnit4 的使用方法和核心概念,可以提高测试效率和测试质量,确保软件的可靠性和稳定性。

    单元测试小结.

    本小结将详细探讨单元测试及其在Java开发中常用的工具——JUnit。 JUnit是Java编程语言中最流行的一种单元测试框架,它为开发者提供了创建和执行单元测试的简便方法。JUnit基于注解,使得测试用例的编写简洁且易于...

    jUnit测试框架入门详解(加强版)

    jUnit 基础知识小结包括:一个 TestCase 一般包含有一组相关的测试方法;使用断言测试结果(注意浮点数 assertEquals 要指定 delta,即精度);每个测试方法必须完全独立;测试代码必须非常简单;不能为测试代码再...

    lottery software工作小结

    本文将基于“lottery software工作小结”这个标题,结合描述中的博文链接以及标签“源码”和“工具”,来探讨相关的知识点。 首先,彩票软件的核心在于算法的设计。它需要根据彩票游戏的规则,比如双色球、大乐透等...

    Spring in Action(第二版 中文高清版).part1

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP ...B.4 小结

    struts开发小结

    这篇博客"Struts开发小结"可能涵盖了作者在使用Struts框架进行开发过程中的经验总结和一些关键点。由于没有直接的描述内容,我们将基于Struts框架的一般特性来讨论相关知识点。 1. **Struts 2框架基础**: Struts ...

    Spring in Action(第二版 中文高清版).part2

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP ...B.4 小结

    (六)Java Ee平台上实现Web服务及多种客户端实例-小结.rar

    本资源的标题"Java EE平台上实现Web服务及多种客户端实例-小结"表明它聚焦于总结如何在Java EE环境中创建和消费Web服务,并提供了不同客户端的应用示例。 Web服务是一种通过HTTP协议传输数据的方式,它允许不同...

    从Java走向Java+EE+.rar

    1.5 小结 13 第2章 使用Jakarta Commons来简化开发 14 2.1 Jakarta Commons的功能和用法 14 2.2 小结 18 第3章 Java EE容器 19 3.1 什么是容器 19 3.2 Tomcat的安装和使用 20 3.3 小结 25 第4章 在...

    Java测试新技术TestNG和高级概念.part1

    1.5 本章小结 第2章 测试设计模式 2.1 针对失败而测试 2.2 工厂 2.3 数据驱动测试 2.4 异步测试 2.5 测试多线程代码 2.6 性能测试 2.7 模拟和桩 2.8 依赖的测试 2.9 继承和annotation范围 2.10 测试分组 2.11 ...

    Java测试新技术TestNG和高级概念.part2

    1.5 本章小结 第2章 测试设计模式 2.1 针对失败而测试 2.2 工厂 2.3 数据驱动测试 2.4 异步测试 2.5 测试多线程代码 2.6 性能测试 2.7 模拟和桩 2.8 依赖的测试 2.9 继承和annotation范围 2.10 测试分组 2.11 ...

    软件测试知识小结

    ### 软件测试知识小结 #### 测试理论知识 **什么是软件测试?** 软件测试是为了寻找软件中的错误而运行软件的过程。一个成功的测试意味着发现了迄今为止尚未发现的错误。软件测试的根本目的是发现软件缺陷、提升...

    java基础小结

    Maven或Gradle用于项目构建和依赖管理,Git用于版本控制,Junit是常用的单元测试框架。 7. **源码分析**:Java的源代码通常以`.java`为扩展名,通过编译器(javac)编译成字节码(`.class`文件),然后由JVM解释...

    Java SE实践教程 源代码 下载

    1.3 小结 35 第2章 对象无处不在——面向对象的基本概念 37 2.1 讲解 38 2.1.1 什么是面向对象 38 2.1.2 面向对象的基本概念 38 2.1.3 Java对面向对象的支持 41 2.2 练习 42 2.2.1 JavaBeans技术开发可重用...

    HttpUnit 小结

    ### HttpUnit小结 #### 一、概述 **HttpUnit**是一个开源的Java库,它为测试Web应用程序提供了一种简单而强大的方法。基于JUnit构建的HttpUnit,旨在弥补JUnit在远程Web内容测试方面的不足。它能够模拟浏览器的...

    主流自动化测试工具小结

    - **版本**: 不同的语言版本各不相同,例如 JUnit 的最新版本为 JUnit 4,CppUnit 的版本为 1.12.0。 - **价格**: 大多为开源免费。 #### 6. SilkTest - **功能**: SilkTest 是 Borland 推出的一款功能测试工具,...

    Java SE实践教程 pdf格式电子书 下载(一) 更新

    感谢大家的支持,我终于升级了,上传限制得到提升,所以把资源整合下!希望大家一如既往 Java SE实践教程 pdf格式电子书 下载(一) 更新 ...Java SE实践教程 pdf格式电子书 下载(二) 更新 ...13.4 小结 387

    SSH练习的小结

    在SSH项目开发过程中,常常会用到各种工具,如Eclipse或IntelliJ IDEA作为集成开发环境,Maven或Gradle作为构建工具,Git进行版本控制,JUnit进行单元测试,以及MySQL或Oracle等数据库管理系统。熟练掌握这些工具...

    Java SE实践教程 pdf格式电子书 下载(四) 更新

    感谢大家的支持,我终于升级了,上传限制得到提升,所以把资源整合下!希望大家一如既往 Java SE实践教程 pdf格式电子书 下载(一) 更新 ...Java SE实践教程 pdf格式电子书 下载(二) 更新 ...13.4 小结 387

    单元测试实践小结(很详细)

    单元测试的实践还包括使用测试框架,如JUnit、TestNG等,它们提供了方便的断言工具和测试结构支持。此外,使用依赖注入(Dependency Injection)可以使测试更加简单,因为我们可以轻松替换真实的对象为模拟对象,...

Global site tag (gtag.js) - Google Analytics