Junit 单元测试、BeanUtils、Properties类
一、 Junit单元测试
1.1. Junit单元测试框架的基本使用
一、搭建环境:
导入junit.jar包(junit4)
二、写测试类:
0,一般一个类对应一个测试类。
1,测试类与被测试类最好是放到同一个包中(可以是不同的源文件夹)
2,测试类的名字为被测试类的名字加Test后缀。
三:写测试方法:
0,一般一个方法对应一个单元测试方法。
1,测试方法的名字为test前缀加被测试方法的名字,如testAddPerson()。
2,单元测试方法上面要加上@Test注解(org.junit.Test)!
3,单元测试方法不能有参数,也不能有返回值(返回void)!测试的方法不能是静态的方法。
四、测试方法的基本使用:
1,可以单独执行一个测试方法,也可以一次执行所有的、一个包的、一个类中所有的测试方法。
2,执行完后,显示绿色表示测试成功;显示红色表示测试失败(抛异常后会测试失败)。
1.2. Assert断言工具类
其中有一些静态的工具方法(不符合期望就抛异常):
assertTrue(...) 参数的值应是true
assertFalse(...) 参数的值应是false
assertNull(...) 应是null值
assertNotNull(...) 应是非null的值
assertSame(...) 使用==比较的结果为true(表示同一个对象)
AssertNotSame(...) 使用==比较的结果为false
assertEquals(...) 两个对象equals()方法比较结果为true
1.3. 用于准备环境、清理环境的方法
@Test
表示单元测试方法。
@Before
所修饰的方法应是非static的(且没有参数,返回值为void)。
表示这个方法会在本类中的每个单元测试方法之前都执行一次。
@After
所修饰的方法应是非static的(且没有参数,返回值为void)。
表示这个方法会在本类中的每个单元测试方法之后都执行一次。
@BeforeClass
所修饰的方法应是static的(且没有参数,返回值为void)。
表示这个方法会在本类中的所有单元测试方法之前执行,只执行一次。
@AfterClass
所修饰的方法应是static的(且没有参数,返回值为void)。
表示这个方法会在本类中的所有单元测试方法之后执行,只执行一次。
二、 内省(Introspector)
1 为什么要学内省?
开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所以sun公司开发了一套API,专门用于操作java对象的属性。
内省是用于操作java对象的属性的,那么以下问题我们必须要清楚。
问题一: 什么是Java对象的属性和属性的读写方法?
问题二: 如何通过内省访问到javaBean的属性 ?
1. 通过PropertyDescriptor类操作Bean的属性.
public static void testPropertyDescriptor() throws Exception{ Person p = new Person(); PropertyDescriptor propertyDescriptor = new PropertyDescriptor("id",Person.class); //获取属性的写的方法。 Method writeMethod = propertyDescriptor.getWriteMethod(); Method readMethod = propertyDescriptor.getReadMethod(); propertyDescriptor.getReadMethod(); writeMethod.invoke(p, 12); System.out.println(readMethod.invoke(p, null)); } |
2. 通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。
public static void testIntrospector() throws Exception{ BeanInfo beanInfo = Introspector.getBeanInfo(Person.class); PropertyDescriptor[] descriptor = beanInfo.getPropertyDescriptors(); for(PropertyDescriptor itemProperty : descriptor){ System.out.println(itemProperty.getReadMethod().getName()); } } |
存在的问题: sun公司的内省API过于繁琐,所以Apache组织结合很多实际开发中的应用场景开发了一套简单、易用的API操作Bean的属性——BeanUtils。
public static void main(String[] args) throws Exception { Person p = new Person(); ConvertUtils.register(new Converter() { @Override public Object convert(Class type, Object value) { try { if(value!=null){ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy MM dd"); Date d = dateFormat.parse((String) value); return d; } } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }, Date.class); BeanUtils.setProperty(p,"id","110"); BeanUtils.setProperty(p,"name","狗娃"); BeanUtils.setProperty(p, "birthDay","1992 12 12"); System.out.println(p.getId() +"=="+ p.getName()+"======"+p.getBirthDay()); } |
三、 Properties类与配置文件
1.1 Properties配置文件说明
Properties类对应.properties文件。文件内容是键值对,键值对之间使用"="或空格隔开。开头是"#"的表示注释
Properties类在加载.properties文件时使用的iso8859-1的编码。所以这个文件中的中文要特殊处理:如果这个配置文件中有中文就必须要进行转义,使用native2ascii.exe命令操作:
native2ascii d:/my.properties d:/my2.properties
使用Properties类中的load(InputStream) 方法可以加载配置文件,使用其中的store(OutputStream) 方法可以保存配置到指定文件。
更多的信息可以看Properties类的API文档。
1.2 加载配置文件
1.3 写配置文件
1.4 使用Properties类
public class DBUtil { static Properties properties = new Properties(); static{ try { Class clazz = DBUtil.class; InputStreamReader fileReader = new InputStreamReader(clazz.getResourceAsStream("/db.properties")); properties.load(fileReader); } catch (IOException e) { e.printStackTrace(); } } public static String getUserName(){ String userName =properties.getProperty("userName"); return userName; } public static String getPassword(){ return properties.getProperty("password"); } public static void main(String[] args) { System.out.println("用户名:"+ getUserName()); System.out.println("密码: "+ getPassword()); } } |
Junit 单元测试、BeanUtils、Properties类的更多相关文章
- main方法或者junit单元测试报 类找不到异常
MyEclipse10.7+Maven项目junit单元测试报找不到类异常,附正常编译后的输出设置 1 首先想到的是输出路径错误 一般不是maven工程的项目编译后的.class文件会在/weba ...
- Spring框架 JdbcTemplate类 @Junit单元测试,可以让方法独立执行 如:@Test
package cn.zmh.PingCe; import org.junit.Test; import org.springframework.jdbc.core.BeanPropertyRowMa ...
- 包装类的使用与Junit单元测试类
包装类: 针对八种基本数据类型定义相应的引用类型,使之有了类的特点,就可以调用类的方法 基本数据类型 包装类 boolean Boolean byte Byte short Short int Int ...
- 解决Junit单元测试 找不到类 ----指定Java Build Path
做junit 单元测试时,发现怎么执行都是以前编译过得代码. 最后找到原因了, src/test/java 编译完的.class路径是 Default output folder Default ou ...
- JUnit单元测试教程(翻译自Java Code Geeks)
JUnit单元测试教程--终极指南 JUnit单元测试教程终极指南 说明 单元测试简介 1 什么是单元测试 2 测试覆盖 3 Java中的单元测试 JUnit简介 1 使用Eclipse实现简单JUn ...
- Junit单元测试、反射、注解
Junit单元测试: * 测试分类: 1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 2. 白盒测试:需要写代码的.关注程序具体的执行流程. * Junit使用:白盒测试 * 步 ...
- 基础-Junit单元测试_反射_注解
一.Junit单元测试 1.1 测试分类: 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 白盒测试:需要写代码的.关注程序具体的执行流程. 1.2 Junit使用(白盒测试) 使用步 ...
- junit单元测试(keeps the bar green to keeps the code clean)
error是程序错误,failure是测试错误. junit概要: JUnit是由 Erich Gamma (设计模式的创始人)和 Kent Beck (敏捷开发的创始人之一)编写的一个回归测试框架( ...
- Junit单元测试学习笔记一
我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的.但是,我们同时应该确保每一个函数 ...
随机推荐
- 玩转MongoDB
一.主从复制 1)首先主从服务器在启动的时候,分别要设置master.slave选项,对于slave可以启动中设置源,也可以在启动后设置源. 如:主:mongod --dbpath=/data/mon ...
- C#-★★函数★★
一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能.所有的高级语言中都有子程序这个概念,用子程序来实现模块的功能.在C#语言中,子程序的作用是由一个主函数和若干个函数构成.由主函数 ...
- python库安装如:requests,selenium等
安装方式: 1.pip安装: 如:pip install requests 2.wheel安装: 在PyPI上下载对应的wheel文件:如要下载requests的wheel文件,打开:http://p ...
- MyEclipse 汉化后切换回英文(中英文切换)
没事玩玩MyEclipse,按网上的办法把它汉化了!搞了些教程看,教程用的都是英文,还是把MyEclipse也切换回原来的英文得了! 方法:1.复制MyEclipse的快捷方式:2.右键快捷方式-&g ...
- 基础篇:6.9)GD&T较线性尺寸公差的优缺点
本章目的:理解GD&T标注对比线性/传统/坐标尺寸公差的优势,但也不要忘记其使用限制. 1.线性尺寸公差 1.1 定义 线性尺寸公差=传统尺寸公差=坐标尺寸公差. 传统尺寸公差(Tradi ...
- luogu P2365 任务安排(FJOI2019 batch)
洛谷传送门 FJOI 日常原题 $2333$(似乎还不如 SDOI2012 任务安排 $2333$) 显然考虑 $dp$,这个是经典的把未来的代价先计算的 $dp$,然后才是斜率优化 一开始想状态时一 ...
- TD-LTE技术原理与系统设计
王映民 等.人邮2010 E-UTRAN E-NodeB 无线资源管理承载 路由到SGW IP头压缩加密 UE附着MME选择 寻呼 广播 测量 EPC SGW 移动性管理 路由转发 终止寻呼 监听 ...
- mysql出现 Unknown column 'bname' in 'where clause'和Unknown column 'bid' in 'field list'
在用mysql数据库建表和修改数据库数据时,出现 Unknown column 'bname' in 'where clause'和Unknown column 'bid' in 'field li ...
- Linux-文件目录类命令
l 文件目录类 pwd 指令 基本语法 pwd (功能描述:显示当前工作目录的绝对路径) 应用实例 案例:显示当前工作目录的绝对路径 ls指令 基本语法 ls [选项] [目录或是文件] 常用选项 - ...
- Ubuntu下配置安装Hadoop 2.2
---恢复内容开始--- 这两天玩Hadoop,之前在我的Mac上配置了好长时间都没成功的Hadoop环境,今天想在win7 虚拟机下的Ubuntu12.04 64位机下配置, 然后再建一个组群看一看 ...