Junit、Assert、內省、Properties類與配置檔案的使用
Junit
Junit有什麼用
可以不寫main方法直接對方法進行測試
怎麼使用
1、匯入junit.jar包
2、加入@Test註釋
3、例子如下
import org.junit.Test;
public class Demo1 {
@Test
public void fun(){
System.out.println("Junit測試");
}
}
使用規範
- 一個類如果需要測試,那麼該類就應該對應著一個測試類,測試類的命名規範 : 被測試類的類名+ Test.
- 一個被測試的方法一般對應著一個測試的方法,測試的方法的命名規範是: test+ 被測試的方法的方法名
例子如下:
//實際類
public class Tool
public static int getMax(){
int a = 3;
int b =5;
int max = a>b?a:b;
return max;
}
public static int getMin(){
int a = 3;
int b = 5;
int min = a<b?a:b;
return min;
}
}
import org.junit.Test;
//測試類
public class ToolTest {
@Test
public void testGetMax(){
int max = Tool.getMax();
if(max!=5){
throw new RuntimeException();
}else{
System.out.println("最大值:"+ max);
}
}
@Test
public void testGetMin(){
int min = Tool.getMin();
if(min!=3){
throw new RuntimeException();
}else{
System.out.println("最小值:"+ min);
}
}
}
使用注意點
- 如果使用junit測試一個方法的時候,在junit視窗上顯示綠條那麼代表測試正確,如果是出現了紅條,則代表該方法測試出現了異常不通過。
- 如果點選方法名、 類名、包名、 工程名執行junit分別測試的是對應的方法,類、 包中 的所有類的test方法,工程中的所有test方法。
- @Test測試的方法不能是static修飾與不能帶有形參。
- 如果測試一個方法的時候需要準備測試的環境或者是清理測試的環境,那麼可以@Before、 @After 、@BeforeClass、 @AfterClass這四個註解。
@Before、 @After 是在每個測試方法測試的時候都會呼叫一次,
@BeforeClass、 @AfterClass是在所有的測試方法測試之前與測試之後呼叫一次而已。
案例如下:
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class Demo2 {
//@Before
@BeforeClass
public static void before(){
System.out.println("方法呼叫前...");
}
@Test
public void fun1() {
System.out.println("我是方法一");
}
@Test
public void fun2(){
System.out.println("我是方法二");
}
//@After
@AfterClass
public static void after(){
System.out.println("方法呼叫後..");
}
}
執行如下:
方法呼叫前...
我是方法二
我是方法一
方法呼叫後..
使用@Before和@After同時去掉static效果如下:
方法呼叫前...
我是方法二
方法呼叫後..
方法呼叫前...
我是方法一
方法呼叫後..
Assert
Assert有什麼用
可以直接使用Assert提供的方法來判斷對錯,由Junit執行紅藍來判斷
Assert有以下幾種方法
import junit.framework.Assert;
import org.junit.Test;
//測試類
public class ToolTest {
@Test
public void testGetMax(){
Assert.assertSame(5,5);
//Assert.assertSame(5, max); // expected 期望 actual 真實
//Assert.assertSame(new String("abc"), "abc");
//Assert.assertEquals(new String("abc"), "abc"); //底層是使用Equals方法比較的
//Assert.assertNull("aa");
//Assert.assertTrue(true);
}
內省
JavaBean
JavaBean是一種特殊的類,主要用於傳遞資料資訊,這種類中的方法主要用於訪問私有的欄位,且方法名符合一定規則。
一個JavaBean需要滿足以下條件:
1)必須有無參建構函式
2)屬性必須私有, 我們稱為欄位
3)提供標準的getter和setter
//快捷鍵是shift+alt+s
public class User
{
private String name;
private int age;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
@Override
//為了方便列印,新增一個toString方法
public String toString()
{
return "User [age=" + age + ", name=" + name + "]";
}
}
內省是什麼
通過反射的方式訪問javabean的技術
內省有什麼用
可以實現一種通用性
1、傳統的方式訪問JavaBean
public class Demo1
{
public static void main(String[] args)
{
User user=new User();
user.setName("zhangsan");
user.setAge(19);
System.out.println(user);
}
}
2、使用內省的方式來訪問javabean
PropertyDescriptor類操作Bean的屬性
public class Demo1
{
public static void main(String[] args) throws Exception
{
User user=new User();
//建立屬性描述器
PropertyDescriptor descriptor=new PropertyDescriptor("name",User.class);
//獲得寫方法
Method writeMethod=descriptor.getWriteMethod();
//呼叫寫方法
writeMethod.invoke(user, "lisi");
System.out.println(user);
}
}
3.簡化書寫,實現通用性。
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import cn.itcast.day08.domain.User;
public class Demo2 {
/**
* @param args
* @throws IntrospectionException
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public static void main(String[] args) throws Exception {
// 內省
User user = new User();
setProperty(user, "name", "wangwu");
setProperty(user, "age", 11);//若為"11"的話就會出現型別錯誤
System.out.println(user);
}
// 實現一個通用的方法 為任意的一個javabean的任意屬性賦任意值
public static void setProperty(Object bean, String fieldName, Object value) throws Exception {
// 建立屬性描述器
PropertyDescriptor descriptor = new PropertyDescriptor(fieldName, bean.getClass());
// 獲得 寫方法
Method writeMethod = descriptor.getWriteMethod();
// 呼叫 寫方法
writeMethod.invoke(bean, value);
}
}
BeanUtils
由於內省用起來特別麻煩,Apache組織開發了一套用於操作JavaBean的API BeanUtils,如下詳講:
(1)可以支援String到8中基本資料型別轉換
(2)其他引用資料型別都需要註冊轉換器 ConvertUtils.register(Converter, Class)
如何使用
需匯入兩個jar包:commons-beanutils-1.8.0.jar、commons-logging.jar
案例如下 :
import java.util.Date;
public class User {
private int id;
private String name;
private double salary;
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public User(int id, String name, double salary) {
super();
this.id = id;
this.name = name;
this.salary = salary;
}
public User(){}
@Override
public String toString() {
return "編號:"+this.id+" 姓名:"+ this.name+ " 薪水:"+ this.salary+" 生日:"+ birthday;
}
}
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
/*
BeanUtils:
BeanUtils主要解決 的問題: 把物件的屬性資料封裝 到物件中。
BeanUtils的好處:
1. BeanUtils設定屬性值的時候,如果屬性是基本資料 型別,BeanUtils會自動幫我轉換資料型別。
2. BeanUtils設定屬性值的時候底層也是依賴於get或者Set方法設定以及獲取屬性值的。
3. BeanUtils設定屬性值,如果設定的屬性是其他的引用 型別資料,那麼這時候必須要註冊一個型別轉換器。
BeanUtilss使用的步驟:
1. 導包commons-logging.jar 、 commons-beanutils-1.8.0.jar
*/
public class Demo3 {
public static void main(String[] args) throws Exception {
//從檔案中讀取到的資料都是字串的資料,或者是表單提交的資料獲取到的時候也是字串的資料。
String id ="110";
String name="陳其";
String salary = "1000.0";
String birthday = "2013-12-10";
//使用匿名內部內註冊一個型別轉換器
ConvertUtils.register(new Converter() {
@Override
public Object convert(Class type, Object value) { // type : 目前所遇到的資料型別。 value :目前引數的值。
Date date = null;
try{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
date = dateFormat.parse((String)value);
}catch(Exception e){
e.printStackTrace();
}
return date;
}
}, Date.class);
User e = new User();
BeanUtils.setProperty(e, "id", id);
BeanUtils.setProperty(e, "name",name);
BeanUtils.setProperty(e, "salary",salary);
BeanUtils.setProperty(e, "birthday",birthday);
System.out.println(e);
}
}
Properties類與配置檔案
相關文章
- Java 對 properties 檔案操作 (ResourceBundle 類和 Properties 類)Java
- spring配置檔案中分別使用多個properties檔案Spring
- [XML與properties檔案]XML
- properties檔案內容亂碼
- mybatis讀取properties檔案內容MyBatis
- 【SSM框架整合】專案xml檔案、properties等檔案的配置SSM框架XML
- log4j.properties 配置檔案
- java中讀取.properties配置檔案Java
- Struts2的properties配置檔案詳解
- java進階(36)--IO和Properties聯合使用(配置檔案)Java
- WebLogic NodeManager 配置檔案nodemanager.propertiesWeb
- Java讀取properties配置檔案工具包Java
- SpringBoot配置檔案使用yml格式時報錯,使用properties格式時正常Spring Boot
- 03.MyBatis學習-----全域性配置檔案_properties_引入外部配置檔案MyBatis
- Gradle 簽名的配置檔案 gradle.propertiesGradle
- JAVA讀取classess下的.properties配置檔案封裝類,linux和windows上都可以使用Java封裝LinuxWindows
- jeesite檔案結構與jeesite.properties
- 讀取resources中properties檔案內容範例
- idea配置檔案.properties中文亂碼顯示????Idea
- spring註解中使用properties檔案Spring
- Maven中的-D(Properties屬性)和-P(Profiles配置檔案)Maven
- spring boot更改配置檔案 application.properties的位置Spring BootAPP
- 【Java Web】——配置檔案的格式之xml和properties的區分JavaWebXML
- Properties屬性檔案
- java屬性檔案properties常用操作工具類Java
- 工具類,關於手工讀取 properties檔案引數
- SpringBoot 如何讓yml,properties配置檔案有提示Spring Boot
- springboot基於properties檔案型別安全配置Spring Boot型別
- springboot 配置檔案 .properties和.yml的寫法區別Spring Boot
- Spring中注入List,Set,Map,Properties的xml檔案配置方法SpringXML
- Spring多資原始檔properties的配置Spring
- SSM整合之使用配置類替換xml配置檔案(2)SSMXML
- 有關*.properties檔案的問題
- properties檔案載入器
- java讀取properties檔案Java
- Spring Boot、Nacos配置檔案properties、yml、yaml的優先順序Spring BootYAML
- 解決properties、xml等配置檔案無法找到問題XML
- Spring Boot 框架中配置檔案 application.properties 當中的所有配置大全Spring Boot框架APP