一、 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)

为什么要学内省?

开发框架时,经常需要使用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类的更多相关文章

  1. main方法或者junit单元测试报 类找不到异常

    MyEclipse10.7+Maven项目junit单元测试报找不到类异常,附正常编译后的输出设置   1 首先想到的是输出路径错误 一般不是maven工程的项目编译后的.class文件会在/weba ...

  2. Spring框架 JdbcTemplate类 @Junit单元测试,可以让方法独立执行 如:@Test

    package cn.zmh.PingCe; import org.junit.Test; import org.springframework.jdbc.core.BeanPropertyRowMa ...

  3. 包装类的使用与Junit单元测试类

    包装类: 针对八种基本数据类型定义相应的引用类型,使之有了类的特点,就可以调用类的方法 基本数据类型 包装类 boolean Boolean byte Byte short Short int Int ...

  4. 解决Junit单元测试 找不到类 ----指定Java Build Path

    做junit 单元测试时,发现怎么执行都是以前编译过得代码. 最后找到原因了, src/test/java 编译完的.class路径是 Default output folder Default ou ...

  5. JUnit单元测试教程(翻译自Java Code Geeks)

    JUnit单元测试教程--终极指南 JUnit单元测试教程终极指南 说明 单元测试简介 1 什么是单元测试 2 测试覆盖 3 Java中的单元测试 JUnit简介 1 使用Eclipse实现简单JUn ...

  6. Junit单元测试、反射、注解

    Junit单元测试: * 测试分类: 1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 2. 白盒测试:需要写代码的.关注程序具体的执行流程. * Junit使用:白盒测试 * 步 ...

  7. 基础-Junit单元测试_反射_注解

    一.Junit单元测试 1.1 测试分类: 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 白盒测试:需要写代码的.关注程序具体的执行流程. 1.2 Junit使用(白盒测试) 使用步 ...

  8. junit单元测试(keeps the bar green to keeps the code clean)

    error是程序错误,failure是测试错误. junit概要: JUnit是由 Erich Gamma (设计模式的创始人)和 Kent Beck (敏捷开发的创始人之一)编写的一个回归测试框架( ...

  9. Junit单元测试学习笔记一

    我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的.但是,我们同时应该确保每一个函数 ...

随机推荐

  1. 2018年10月19 手记 - 身为开发者的我de窘境

    从10月1国庆过完节回来,那已经是7号了,之后便开始紧锣密鼓的筹划着接下来11月份的公司组织的对外活动,这边新来的产品对产品或者说对任务很是负责,并且策划了很多的方案,并且乐意站在我们开发的角度上去考 ...

  2. 用Javac编译Java文件时出现“编码 GBK 的不可映射字符“的error

    前提:JDK版本 >= 1.6会出现编译报错, 1.6前只会是警告 以下是javac的document: 遇到这种情况的原因是: 文件编码格式与编译器编译所选的encoding不同,有非英文字符 ...

  3. Qt4.8.5移植

    这两天搞了Qt移植 因为不小心 耽误了挺多时间 但是也比较好的掌握了   现在记录一下 准备工具: tslib-1.16 qt-everywhere-opensource-src-4.8.5.tar ...

  4. TR-069_Amendment-4:附录G.穿越NAT网关的连接请求方式

    注意:这种机制只适用于RFC 3489[21]中定义的经典STUN,RFC 5389引入后,这个机制已经过时.这个机制不是设计用于RFC 5389中定义的STUN.IPv6部署要么不使用NAT,要么以 ...

  5. restsharp 组件调用返回 gbk 编码的api,中文乱码解决方法。(restsharp response 中文乱码 gbk)

    最近要调一个restful风格的api 用了 一个开源第三方组件,组件还是蛮好用的, 支持直接按参数定义实体类,然后发起请求之前直接 addobject 的方式就把请求参数给添加进去了, 解码的时候可 ...

  6. IIS进程池异常崩溃,导致网站 service unavailable,原因排查与记录。

    昨晚十点钟的样子,网站崩溃,开始 service unavailable,最近开始业务高峰,心里一惊,麻痹肯定进程池又异常崩溃了.又碰到什么问题?上次是因为一个异步线程的问题,导致了进程池直接崩溃,后 ...

  7. Case When ELSE END语句

    一.简介.Case  When   ELSE   END共有两种用法: 说实话,这种就是数据库版的switch语句,但是只是形式上很像,实际上还是有差别的!!! Create Table Test6( ...

  8. plsql数据库异常---plsql 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致

    今天遇到这个问题网上搜了一下答案找到了 转贴 http://blog.csdn.net/lidew521/article/details/8546155 plsql 登录后提示: Database c ...

  9. Orcale 之子查询

    子查询和连接查询一样,都提供了使用单个查询访问多个表中的数据的方法.子查询在其他查询的基础上,提供一种进一步有效的方式来访问数据. IN 关键字 使用 IN 关键字可以将原表中特定的的值与子查询中返回 ...

  10. C#(Winform)禁用TextBox控件的鼠标事件

    1. 继承TextBox,然后重写父类的部分方法,核心代码如下 public class MyTextBox : TextBox { protected override void WndProc(r ...