JUnit测试技术 和 java注解
来源:互联网 发布:mac 访问windows共享 编辑:程序博客网 时间:2024/06/06 14:16
JUnit软件测试技术(工具)
在项目中建立专门用户测试的包结构。
在Junit中,通过@Test注解,可以运行一个方法。
★ Junit注解说明
使用了@Test注解应该满足以下条件:
1) 必须是无参数的非静态方法。
2) 添加@Test注解的类,必须拥有一个无参数的公开构造,且只能有这一个构造器(不能包含其它构造器)
★ JUnit中的其它注解
@BeforeClass、@AfterClass、@Before、@After
@Before、@After
每个被@Test注解了的方法,在运行之前,都会先运行@Before注解的方法,在运行@After注解的方法
@BeforeClass、@AfterClass
被@BeforeClass注解的方法,在整个类的运行之前运行,只运行一次。(注解的为静态方法)
被@AfterClass注解的方法,在整个类运行之后运行,只运行一次(注解的为静态方法)
package cn.hncu.junit;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;public class JunitDemo {@BeforeClasspublic static void beforeClass(){System.out.println("beforeClass");}@Beforepublic void before(){System.out.println("before");}@Testpublic void demo1(){System.out.println("demo1");}@Testpublic void demo2(){System.out.println("demo2");}@Afterpublic void after(){System.out.println("after");}@AfterClasspublic static void afterClass(){System.out.println("afterClass");}}结果:
beforeClassbeforedemo1afterbeforedemo2afterafterClass注解 ( Annotation )
在了解注解之前,我们先来了解一下元数据
★ 元数据
所谓元数据就是数据的数据。也就是说,元数据是描述数据的。就象数据表中的字段一样,每个字段描述了这个字段下的数据的含义。
元数据可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。许多元数据工具,如XDoclet,将这些功能添加到核心Java语言中,暂时成为Java编程功能的一部分。
一般来说,元数据的好处分为三类:文档编制、编译器检查和代码分析。代码级文档最常被引用。元数据提供了一种有用的方法来指明方法是否取决于其他方法,它们是否完整,特定类是否必须引用其他类,等等。
★ 什么是注解
Java中的注解就是Java源代码的元数据,也就是说注解是用来描述Java源代码的。 基本语法就是:@后面跟注解的名称。
★ Java中预定义注解 (Java.lang包当中的三个预定注解)
①Override:标识某一个方法是否正确覆盖了它的父类的方法。
②Deprecated:表示已经不建议使用这个类成员了。 它是一个标记注解。
③SuppressWarnings:用来抑制警告信息。
下面我们来学习一下,怎么自定义自己的注解:
采用@inyerface来定义注解
package cn.hncu.annotation;public @interface MyAnno {}定义了之后就可以使用了
package cn.hncu.annotation;@MyAnnopublic class Demo1 {@MyAnnoprivate String name;@MyAnnopublic Demo1(String name) {this.name=name;}@MyAnnopublic void aa(){System.out.println(name);}}那么我们怎么通过注解来做功能呢,所以就引出了注解的注解的概念
对注解的注解
☆指定目标 Target(@Target({ ElementType.TYPE, ElementType.METHOD}) )
在了解如何使用Target 之前,需要认识另一个类,该类被称为ElementType ,它实际上是一个枚举。这个枚举定义了注释类型可应用的不同程序元素。
枚举 ElementType
枚举常量:
ANNOTATION_TYPE 注释类型声明
CONSTRUCTOR
构造方法声明
FIELD
字段声明(包括枚举常量)
LOCAL_VARIABLE 局部变量声明
METHOD
方法声明
PACKAGE
包声明
PARAMETER
参数声明
TYPE
类、接口(包括注释类型)或枚举声明
☆设置保持性 Retention(@Retention(RetentionPolicy.SOURCE) )
RetentionPolicy 枚举类中定义了3种注解保持性,分别决定了Java 编译器以何种方式处理注解。
用通俗的话来说就是表示该注解的生命周期
枚举 RetentionPolicy
枚举常量:
CLASS 编译器将把注释记录在类文件(字节码文件)中,但在运行时 VM 不需要保留注释。
RUNTIME
编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。
SOURCE 编译器要丢弃的注释。
☆添加公共文档 Documented(@Documented )
在默认的情况下在使用javadoc自动生成文档时,注解将被忽略掉。如果想在文档中也包含注解,必须使用Documented为文档注解。
☆设置继承 Inherited(@Inherited )
在默认的情况下,父类的注解并不会被子类继承。如果要继承,就必须加上Inherited注解。
package cn.hncu.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Inherited;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target({ElementType.METHOD,ElementType.FIELD})//表示该注解可以在方法,属性前使用@Retention(RetentionPolicy.RUNTIME)//表示可以被反复的读取@Inherited//表示子类可以继承@Documented//javadoc生成帮助文档时,会吧注解也加上public @interface MyAnno {public String myName() default "dragon";//注解中把方法当做成员变量//default 后面的表示 默认值}Demo1
package cn.hncu.annotation;public class Demo1 {@MyAnno(myName = "field")private String name;public Demo1(String name) {this.name=name;}@MyAnno()public void aa(){System.out.println(name);}}
其实注解本身是没有功能的,我们只能通过读取注解的内容,来决定我们的功能,下面就来学习一下怎么读取注解的内容:(通过类反射)模拟JUnit功能
相关说明:
1)JUnit用的是@Test注解,我们用@MyTest注解。
2)JUnit已经嵌入到MyEclipse当中,我们自己的MyJUnit只要能独立运行就可以(不嵌入),同时这样我们也不方便在MyJUnit中以参数方式接收到被测试类的类名与方法名,只能以键盘输入的方式接收。
3)JUnit能实现指定单个方法来调用执行,由于不能利用MyEclipse传参,因此我们在MyJUnit程序中遍历所有的方法并通过判断是否声明@MyTest注解来决定是否调用执行该方法。
MyTest:
package cn.hncu.myJUnit;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)//这个注解必须要加MyTest注解才能用@Target(ElementType.METHOD)public @interface MyTest {}MyJUnit:
package cn.hncu.myJUnit;import java.lang.reflect.Method;import java.util.Scanner;public class MyJUnit {public static void main(String[] args) throws Exception {System.out.println("输入要被测试的类全名");Scanner sc=new Scanner(System.in);String className=sc.nextLine();Class c=Class.forName(className);Object obj=c.newInstance();Method[] methods=c.getDeclaredMethods();for(Method method:methods){boolean boo=method.isAnnotationPresent(MyTest.class);//返回值为true表示该方法被MyTest注解if(boo){method.invoke(obj, null);}}}}Demo:
package cn.hncu.myJUnit;public class Demo {@MyTestpublic void demo1(){System.out.println("1111111111");}public void demo2(){System.out.println("2222222222");}@MyTestpublic void demo3(){System.out.println("33333333333");}}测试结果:
输入要被测试的类全名cn.hncu.myJUnit.Demo111111111133333333333
- JUnit测试技术 和 java注解
- JUnit软件测试技术(工具)和注解( Annotation )
- JUnit(二) 测试结果和注解
- junit测试@注解
- Java测试Junit和mockito
- 软件测试技术JUnit和单元测试入门简介--Junit框架
- 软件测试技术JUnit和单元测试入门简介--JUnit实例
- Java高级JUnit、注解
- JUnit---(断言和注解)
- JUnit 断言和注解
- Java开发01----Junit安装和测试
- Java测试框架TestNG和JUnit对比
- Java测试框架TestNG和JUnit对比
- Java开发必备技术Junit测试技术学习---源代码演示Junit
- Java之--------JUnit软件测试技术(工具)Annotation1
- 【JUnit】JUnit软件测试技术(工具)
- 软件测试技术JUnit和单元测试入门简介--单元测试及软件测试技术概念以及JUnit编写原则和特征
- JUnit软件测试技术(工具)
- Windows下添加右键快捷菜单
- LeetCode Container With Most Water
- linux 设置服务自启动
- HDU 5834 Magic boy Bi Luo with his excited tree 树形DP
- ZZULIoj 2179: 紧急营救 ( 最短路
- JUnit测试技术 和 java注解
- 2017.08.19总结
- HDU Friend-Graph【暴力】【卡内存】【水题】
- ListView控件
- caffe in python ---Classification
- Unity摁键生成,旋转方法
- KMeans聚类、肘部法则求最佳分类数
- AndroidStudio安装模拟器(install Haxm)出现VT not working问题(Window10)
- @AutoWired自动装配注释去掉下面的红线