`
jzhua2006
  • 浏览: 301572 次
  • 性别: 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 的使用方法和核心概念,可以提高测试效率和测试质量,确保软件的可靠性和稳定性。

    单元测试小结.

    单元测试小结\单元测试小结

    HttpUnit 小结

    HttpUnit 小结 HttpUnit 是基于JUnit构建的一个开源测试框架,专门针对Web应用的测试,解决使用JUnit框架无法对远程Web内容进行测试,支持JS,cookies。。。。

    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 小结

    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 小结

    从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 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技术开发可重用...

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

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

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

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

    突破程序员基本功的16课.part2

    1.3 小结 第2课 对象与内存控制 2.1 实例变量和类变量 2.1.1 实例变量和类变量的属性 2.1.2 实例变量的初始化时机 2.1.3 类变量的初始化时机 2.2 父类构造器 2.2.1 隐式调用和显式调用 2.2.2 访问子类对象...

    Spring in Action(第2版)中文版

    目录 第一部分spring的核心 第1章开始spring之旅 1.1spring是什么 1.2开始spring之旅 1.3理解依赖注入 ...1.5小结 ...2.6小结 ...3.7小结 ...4.6小结 ...5.8小结 ...6.5小结 ...7.7小结 ...8.6小结 ...9.6小结 ...b.4小结

    JAVA程序开发大全---上半部分

    1.4 本章小结 5 第2章 MyEclipse集成开发环境的使用 6 2.1 MyEclipse集成开发工具界面 6 2.1.1 MyEclipse的菜单栏 7 2.1.2 MyEclipse的工具栏 13 2.1.3 MyEclipse的透视图 14 2.1.4 MyEclipse的视图 17 2.1.5 ...

    Struts2 in action中文版

    第一部分 Strut 2:一个全新的框架 第1章 Struts 2:现代Web框架 2 1.1 Web应用程序:快速学习 2 1.1.1 构建Web应用程序 2 1.1.2 基础技术简介 3 1.1.3 深入研究 6 1.2 Web应用程序框架 7 ...15.7 小结 332

    《程序天下:J2EE整合详解与典型案例》光盘源码

    第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 ...15.13 小结

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 ...15.13 小结

Global site tag (gtag.js) - Google Analytics