yxhxj2006

          常用鏈接

          統計

          最新評論

          #

          Java對Excel表格的操作

               摘要: Java對Excel表格的操作 目前軟件開發多采用B/S架構。正B/S架構可以給軟件的開發部署帶來很大的便利,但是與此同時這種架構也帶來了一些問題,例如Web報表的處理等,在B/S架構下,客戶端的開發并沒有豐富的、互動性能良好的界面組件供開發人員調用,而且調用客戶端機器上的設備也很不方便。這些缺陷將會導致B/S架構的軟件在客戶端的一些功能開發陷入困境。    &n...  閱讀全文

          posted @ 2012-08-09 16:31 奮斗成就男人 閱讀(7057) | 評論 (1)編輯 收藏

          java中各種數據類型相互轉換方法

          1如何將字串 String 轉換成整數 int?

          A. 有兩個方法:

          1). int i = Integer.parseInt([String]); 或
          i = Integer.parseInt([String],[int radix]);

          2). int i = Integer.valueOf(my_str).intValue();

          注: 字串轉成 Double, Float, Long 的方法大同小異.


          2 如何將整數 int 轉換成字串 String ?


          A. 有叁種方法:

          1.) String s = String.valueOf(i);

          2.) String s = Integer.toString(i);

          3.) String s = "" + i;

          注: Double, Float, Long 轉成字串的方法大同小異.

          JAVA數據類型轉換       ynniebo [收藏] 
          關鍵字     類型轉換
          出處   

          這是一個例子,說的是JAVA中數據數型的轉換.供大家學習引

          package cn.com.lwkj.erts.register;
          import java.sql.Date;
          public class TypeChange {
              public TypeChange() {
              }
              //change the string type to the int type
              public static    int stringToInt(String intstr)
              {
                Integer integer;
                integer = Integer.valueOf(intstr);
                return integer.intValue();
              }
              //change int type to the string type
              public static String intToString(int value)
              {
                Integer integer = new Integer(value);
                return integer.toString();
              }
              //change the string type to the float type
              public static    float stringToFloat(String floatstr)
              {
                Float floatee;
                floatee = Float.valueOf(floatstr);
                return floatee.floatValue();
              }
              //change the float type to the string type
              public static String floatToString(float value)
              {
                Float floatee = new Float(value);
                return floatee.toString();
              }
              //change the string type to the sqlDate type
              public static java.sql.Date stringToDate(String dateStr)
              {
                return    java.sql.Date.valueOf(dateStr);
              }
              //change the sqlDate type to the string type
              public static String dateToString(java.sql.Date datee)
              {
                return datee.toString();
              }

              public static void main(String[] args)
              {
                java.sql.Date day ;
                day = TypeChange.stringToDate("2003-11-3");
                String strday = TypeChange.dateToString(day);
                System.out.println(strday);
              }


          }

          JAVA中常用數據類型轉換函數
          雖然都能在JAVA API中找到,整理一下做個備份。

          string->byte
          Byte static byte parseByte(String s) 

          byte->string
          Byte static String toString(byte b)

          char->string
          Character static String to String (char c)

          string->Short
          Short static Short parseShort(String s)

          Short->String
          Short static String toString(Short s)

          String->Integer
          Integer static int parseInt(String s)

          Integer->String
          Integer static String tostring(int i)

          String->Long
          Long static long parseLong(String s)

          Long->String
          Long static String toString(Long i)

          String->Float
          Float static float parseFloat(String s)

          Float->String
          Float static String toString(float f)

          String->Double
          Double static double parseDouble(String s)

          Double->String
          Double static String toString(Double)

          ++++++++++++++++++++++++++++++++++++++++++++++++++++++

          數據類型
          基本類型有以下四種:
          int長度數據類型有:byte(8bits)、short(16bits)、int(32bits)、long(64bits)、
          float長度數據類型有:單精度(32bits float)、雙精度(64bits double)
          boolean類型變量的取值有:ture、false
          char數據類型有:unicode字符,16位
          對應的類類型:Integer、Float、Boolean、Character、Double、Short、Byte、Long

          轉換原則
          從低精度向高精度轉換
          byte 、short、int、long、float、double、char
          注:兩個char型運算時,自動轉換為int型;當char與別的類型運算時,也會先自動轉換為int型的,再做其它類型的自動轉換
          基本類型向類類型轉換
          正向轉換:通過類包裝器來new出一個新的類類型的變量
          Integer a= new Integer(2);
          反向轉換:通過類包裝器來轉換
          int b=a.intValue();
          類類型向字符串轉換
          正向轉換:因為每個類都是object類的子類,而所有的object類都有一個toString()函數,所以通過toString()函數來轉換即可
          反向轉換:通過類包裝器new出一個新的類類型的變量
          eg1: int i=Integer.valueOf(“123”).intValue()
          說明:上例是將一個字符串轉化成一個Integer對象,然后再調用這個對象的intValue()方法返回其對應的int數值。
          eg2: float f=Float.valueOf(“123”).floatValue()
          說明:上例是將一個字符串轉化成一個Float對象,然后再調用這個對象的floatValue()方法返回其對應的float數值。
          eg3: boolean b=Boolean.valueOf(“123”).booleanValue()
          說明:上例是將一個字符串轉化成一個Boolean對象,然后再調用這個對象的booleanValue()方法返回其對應的boolean數值。
          eg4:double d=Double.valueOf(“123”).doubleValue()
          說明:上例是將一個字符串轉化成一個Double對象,然后再調用這個對象的doubleValue()方法返回其對應的double數值。
          eg5: long l=Long.valueOf(“123”).longValue()
          說明:上例是將一個字符串轉化成一個Long對象,然后再調用這個對象的longValue()方法返回其對應的long數值。
          eg6: char=Character.valueOf(“123”).charValue()
          說明:上例是將一個字符串轉化成一個Character對象,然后再調用這個對象的charValue()方法返回其對應的char數值。
          基本類型向字符串的轉換
          正向轉換:
          如:int a=12;
          String b;b=a+””;
          反向轉換:
          通過類包裝器
          eg1:int i=Integer.parseInt(“123”)
          說明:此方法只能適用于字符串轉化成整型變量
          eg2: float f=Float.valueOf(“123”).floatValue()
          說明:上例是將一個字符串轉化成一個Float對象,然后再調用這個對象的floatValue()方法返回其對應的float數值。
          eg3: boolean b=Boolean.valueOf(“123”).booleanValue()
          說明:上例是將一個字符串轉化成一個Boolean對象,然后再調用這個對象的booleanValue()方法返回其對應的boolean數值。
          eg4:double d=Double.valueOf(“123”).doubleValue()
          說明:上例是將一個字符串轉化成一個Double對象,然后再調用這個對象的doubleValue()方法返回其對應的double數值。
          eg5: long l=Long.valueOf(“123”).longValue()
          說明:上例是將一個字符串轉化成一個Long對象,然后再調用這個對象的longValue()方法返回其對應的long數值。
          eg6: char=Character.valueOf(“123”).charValue()
          說明:上例是將一個字符串轉化成一個Character對象,然后再調用這個對象的charValue()方法返回其對應的char數值

          posted @ 2012-08-09 16:29 奮斗成就男人 閱讀(350) | 評論 (0)編輯 收藏

          Linux中常用命令學習總結

          前面的章節里對linux的文件的權限做了簡單的解釋。現在來看看常見的命令,從簡單的開始:

          1 、切換目錄

          cd

          到/tmp 目錄:cd /tmp

          到上層目錄:cd ..

          2 、查看當前目錄

          pwd

          3、 創建一個新的文件夾:

          mkdir

          創建一層目錄:

          創建多層目錄:

          4 、刪除目錄:

          rmdir [-p]   如果需要層級刪除目錄,就需要帶上p(只能刪除空目錄)

          5、查詢環境變量

          echo $PATH  或者$PATH

           

          6、切換用戶:

          su 用戶名

          7、移動文件

           

           

          仔細閱讀上面的命令,你會發現mv還可以對文件進行從命名,上面的命令將hellot.txt從a中移動到了b中,并改名為hello1.txt

           

          8、查看文件與目錄

          ls

          ls -a  目錄名稱:列出目錄中所有的文件

          ls -al 目錄名:列出長字符串,包含文件的一些詳細信息

          如果沒有給定目錄名,那么就是當前目錄

           

          9、文件的復制:

          cp [-adfilprsu] 源文件  目標文件    //將源文件拷貝到目標文件

          cp  src1,src2,... des   //將多個源文件拷貝到目的文件夾

           

          cp這個命令非常重要,不同的身份執行對命令產生不同的效果,尤其是-a,-p參數,對不同的身份來說,區別非常大。

          例1:

          使用root執行:

          如果我們要將文件的所有的屬性復制過來,則要加上參數-a

           

          復制一個目錄到另外一個目錄 cp -r /src /desc

           

           

          10 、移除文件或目錄

          rm [-fir] 文件或目錄

          -f 強制的意思,忽略不存在的文件,不會出現警告信息

          -i互動模式:刪除前,會詢問是否刪除

          -r :遞歸刪除

           

          這里不再演示,記得之前的rmdir嗎,只能刪除空目錄,所以刪除非空目錄只能使用rm -r

          11、文件類容查詢

          cat

          -b:列出行號

          -n:列出行號,包括空白行

           

          cat 是一次性將數據顯示到屏幕上,如果想一頁一頁的看怎么辦?

          使用more命令

          more在運行的過程中,你有幾個按鍵可以按:

          空格鍵:代表向下翻一頁

          Enter:代表向下滾動一行

          q:離開more

          b:往回翻頁

           

           

          12 、創建文件

          touch

          touch a.txt 就會在當前目錄下創建a.txt

           

          13、查找文件的命令

          whereis ,find

          whereis [-bmsu]  文件或目錄名

          -b:二進制文件

          -m:只找在說明文件manual路徑下的問津

          -s:只找source源文件

          -u:查找不在上述三個選項中的其他特殊文件

           

          whereis ifconfig

           

          下面看看find命令

           

          find [path] [option] [actioin]

          查找/home下面屬于gavin的文件

          find   /home  -user  gavin

          查找系統中不屬于任何人的文件

          find /  -nouser

          查找文件名為passwd的這個文件

          find    /     -name passwd

          查找文件類型為socket的文件

          find   /    -type s

           

          14、磁盤和目錄的容量

          df:列出文件系統的整體磁盤使用量

          du:評估文件系統的磁盤使用量

          15 創建鏈接文件

          ln  [-sf] 源文件   目標文件

           

          -s  :創建軟連接,如果不加則是硬連接

          -f:如果目標文件存在,則刪除后再建

           

          [root@localhost test2]# echo 'good'>a.txt
          [root@localhost test2]# ls
          a.txt
          [root@localhost test2]# ln -s a.txt b
          [root@localhost test2]# ls
          a.txt  b
          [root@localhost test2]# ll
          total 12
          -rw-r--r-- 1 root root 5 Aug  8 01:09 a.txt
          lrwxrwxrwx 1 root root 5 Aug  8 01:09 b -> a.txt
          [root@localhost test2]# echo 'hello'>>b
          [root@localhost test2]# cat b
          good
          hello
          [root@localhost test2]# cat a.txt
          good
          hello
          [root@localhost test2]# ln a.txt c
          [root@localhost test2]# ll
          total 20
          -rw-r--r-- 2 root root 11 Aug  8 01:09 a.txt
          lrwxrwxrwx 1 root root  5 Aug  8 01:09 b -> a.txt
          -rw-r--r-- 2 root root 11 Aug  8 01:09 c
          [root@localhost test2]# echo 'bad'>>c
          [root@localhost test2]# cat c
          good
          hello
          bad
          [root@localhost test2]# cat a.txt
          good
          hello
          bad
          [root@localhost test2]# cat b
          good
          hello
          bad
          [root@localhost test2]# rm a.txt
          rm: remove regular file `a.txt'? y
          [root@localhost test2]# cat b
          cat: b: No such file or directory
          [root@localhost test2]# cat c
          good
          hello
          bad
          [root@localhost test2]#

           

          運行上面的命令行,相信你對ln的使用會非常清楚的。

           

          15、掛載CD

          16、文件壓縮

          tar

          -c:創建一個壓縮文件

          -v:顯示壓縮過程

          -f:給出壓縮文件名

          -x:解壓文件

          -t::查看壓縮包中又哪些文件

          posted @ 2012-08-09 14:59 奮斗成就男人 閱讀(298) | 評論 (0)編輯 收藏

          Linux文件權限的那些事

          linux是一個多用戶,多任務的操作系統,對于每一個文件它的屬性中都包括:文件所有者(owner),文件所屬組(group),其他用戶(other),還必須具備與這三個角色對應的讀,寫,執行的權限,如下圖:

          在tmp目錄下面有一個a.txt文件,我們通過ls -l命令可以查看其詳細信息:

          -:表示普通文件,d:表示目錄文件,l:鏈接文件,b:設備文件中可以供存儲的接口設備,c:設備文件中串行端口設備如鍵盤。

          由于最前面是-:所以a.txt是普通文件。

          再看  rw-r--r--部分,我們將其分為三組,分別對應文件所有者,文件所屬組,其他用戶的權限.

          其中r代表讀取權限,w:代表寫權限,x:代表執行權限(這里沒出現),-:代表沒有某種權限。

          那對上面的權限的解釋就是:

          owner:可以讀和寫,不能執行

          group:可以讀取不能寫,不能執行

          other:可以讀取,不能寫,不能執行

           

          第一個root代表文件所有者,第二個root代表文件所屬組

          那么現在我如果想修改文件所有者,文件所屬組,文件權限該怎么做,請繼續向下閱讀:

          chgrp:修改用戶所屬組,chown:修改文件所有者,chmod:修改文件權限

           

          假設我的系統中又一個叫gavin的組(通過/etc/group查看)

          如上圖,通過chgrp命令將該文件的group修改為了gavin

          下面修改其所有者:

           

          修改其權限:

           

          chmod  777 a.txt   這個777代表什么?

          在linux中使用數字代表權限:

          r:4 w:2 x:1

          r--   =4+0+0=4;

          rw- =4+2+0=6;

          rwx =4+2+1=7

          相信寫到這里大家都應該明白了吧。

           

          權限對于文件和文件夾的意義是不一樣的,

          對于文件:

          r:代表可以讀取文件的內容,w:代表可以修改文件的內容,x:可以執行這個文件

          對于文件夾:

          r:可以獲取文件夾中又哪些文件,w:可以添加和刪除文件夾中的內容,x:可以進入文件夾,

          如果某個角色對于一個文件夾的權限是rw-;

          那么他僅僅可以使用ls獲取文件夾中的內容,但是不可以使用cd進入該文件夾。

           

           

           

          文件的權限告一段落,現在來看看linux中的那些常見目錄中的內容:

          /bin   系統有很多放置執行文件的目錄,但是/bin比較特殊,因為/bin放置的是在單用戶維護模式下還能夠被操作的命令,在/bin下面的命令可以被root和一般賬戶使用,如:cat,chmod,chown,data,mv,mkdir,cp ,bash等常用命令。

          /boot  主要放置開機使用到的文件

          /dev  在linux系統中任何設備與接口設備都是以文件的形式存在于這個目錄當中,你只要訪問某個文件就相當于訪問該設備

          /etc  系統的主要配置文件幾乎都在這個文件夾類。

          /home 這是系統默認的用戶主文件夾

          /lib 系統的函數庫非常多,二/lib放置的是開機會使用到的函數庫

          /mnt 如果你想臨時掛在一些外部設備(光盤)一般建議放置到這個目錄。

          /opt 這是給第三方軟件放置的目錄

          /root 系統管理員的主文件夾

          /tmp 這是讓一般用戶或者正在執行的程序放置文件的地方,這個目錄是任何人都可以訪問的,所以你需要定期清理一下,當然重要數據時不能放到這里來的。

           

           

          關于文件權限的最后一點就是:文件默認權限umask

          現在我們已經知道如何新建或者改變一個目錄的屬性了,不過你知道當你新建一個新的文件或則目錄是,它的默認權限是什么嗎?那就是于umask這東西有關了,那么umask是在搞什么呢,基本上,umask就是制定目前用戶在新建文件或目錄的時候權限的默認值,如果獲得或設置umask,方法如下:

          #umask  或則  umask -S

          (四位數,第一位我們先不管,表示特殊權限,我們從第二位開始看起)

          在默認權限上,文件和目錄是不一樣的,對于一個目錄,x權限是非常重要的 ,而對于一個文件,x權限在默認是不應該有的,因為文件大多是用來存儲數據的,所以在linux中,文件的默認權限是666,目錄的默認權限是777

           

           

          要注意的是umask的分數指的是“默認值需要剪掉的權限”,

          所以新建文件時權限:rw--r--r--

          新建目錄:r-xr-xr-x

          posted @ 2012-08-09 14:59 奮斗成就男人 閱讀(141) | 評論 (0)編輯 收藏

          junit淺學筆記二

          上一節初步介紹了什么是單元測試,為什么要做單元測試,以及junit4的初步使用,這里我們接著說一下junit4中的注解。

            =============本節知識點============================

          *     Error和Failures

          *    Junit4 Annotation

          ==================================================================

           

          1.   在講注解之前,先來認識 Error和Failures這兩種錯誤有什么不同。

           

          Errors:表示程序本身錯誤

           

           

          @Test
          publicvoid testAdd() {
          int z=new T().add(5,3);
          assertEquals(
          8,z);
          int a=8/0; //這一句是有錯誤的
          }

           

          運行方法,會有一下錯誤提示:

          Failures: 是指測試失敗。

          @Test
          publicvoid testAdd() {
          int z=new T().add(5,4); //這里修改了數值,把4該為3就正確了
          assertEquals(
          8,z);
          }

          在來運行這個方法,看一下錯誤提示:

          所以,我們在寫測試程序的時候,要先保證Errors是沒有錯誤的,再來看Failures有沒有錯誤。

           

          2.  下面介紹junit4 的常用注解

          -----------------------------------------------------------------------------------------------

          *             @ Test:測試方法

                            A)  (expected=XXEception.class)

                          B)  (timeout=xxx)

          *.           @ Ignore: 被忽略的測試方法

          *.           @Before: 每一個測試方法之前云行。

          *.           @After : 每一個測試方法之后運行。

          *.           @BefreClass 所有測試開始之前運行。

          *.           @AfterClass 所有測試結果之后運行。

          ------------------------------------------------------------------------------------------------

          下面通過一個測試程序來解釋這些注解含義

          復制代碼
          package com.junit4.cc.test;

          importstatic org.junit.Assert.*;
          importstatic org.hamcrest.Matcher.*;

          import org.junit.Test;
          import com.junit4.cc.*;

          import org.junit.Before;
          import org.junit.BeforeClass;
          import org.junit.AfterClass;
          import org.junit.After;
          import org.junit.Ignore;


          publicclass TTest {

          @BeforeClass
          //的所有方法運行之前運行。
          publicstaticvoid beforeClass(){
          System.out.println(
          "------------beforeClass");
          }

          @AfterClass
          //在所有方法運行之后運行
          publicstaticvoid afterClass(){
          System.out.println(
          "-------------afterClass");
          }

          @Before
          //每個測試方法運行之前運行
          publicvoid before(){
          System.out.println(
          "=======before");
          }

          @After
          //每個測試方法運行之后運行
          publicvoid after(){
          System.out.println(
          "=======after");
          }

          @Test
          publicvoid testAdd() {
          int z=new T().add(5,3);
          assertEquals(
          8,z);
          System.out.println(
          "test Run through");
          }

          @Test ()
          publicvoid testdivision(){
          System.out.println(
          "in Test Division");

          }

          @Ignore
          //表示這個方法是不被運行的
          @Test
          (expected
          =java.lang.ArithmeticException.class,timeout=100) //timeout表示要求方法在100毫秒內運行完成,否則報錯
          publicvoid testDivide(){
          int z =new T().divide(8,2);
          }



          }
          復制代碼

          運行結果如下:

          標記紅星(*)方法在每個方法開始和結尾都運行一次。

          標記綠星(*)的方法只在所有方法的開始和結尾運行一次。

          junit有多種注解,我們常用的也就上面幾種。

          posted @ 2012-08-09 14:25 奮斗成就男人 閱讀(150) | 評論 (0)編輯 收藏

          junit淺學筆記三

          這一節我們將學習進行批量處理,假如我們有多的測試,怎樣進行批量處理,請跟著我做。

          ---------------------------------------------

          假如我們寫了兩個被測程序。如下:

          T.java

          復制代碼
          package com.junit4.cc;

          publicclass T {
          publicint add(int x ,int y){
          return x+y;
          }
          publicstaticvoid main(String args[]){
          int z=new T().add(3,5);
          System.out.println(z);
          }
          }
          復制代碼

          User.java

          復制代碼
          package com.junit4.cc;

          publicclass User {
          public String geName(){
          return"劉若英"; //PS:她是我的偶像嘻嘻:)
          }
          }
          復制代碼

          ------------------------------------測試類-------------------------

          下面要對上面的兩個類寫測試類。(關于測試類的創建的方法,不懂的可以看我的第一篇《junit淺學筆記一》)

          TTest.java   對應的是T.java的測試類。

          復制代碼
          package com.junit4.cc.test;

          importstatic org.junit.Assert.*;

          import org.junit.Test;
          import com.junit4.cc.*;

          publicclass TTest {
          @Test
          publicvoid testAdd() {
          int z=new T().add(5,3);
          assertEquals(
          8,z);
          }
          }
          復制代碼

          UserTest.java  對應的是User.java

          復制代碼
          package com.junit4.cc.test;

          importstatic org.junit.Assert.*;

          import org.junit.Test;
          import com.junit4.cc.User;

          publicclass UserTest {

          @Test
          publicvoid testGeName() {
          assertEquals(
          new User().geName(),("劉若英"));
          }
          }
          復制代碼

          完成之后的列表如下:

          要批量運行上面兩個測試類,有兩個方法。

          方法一

          右鍵點擊測試包“com.junit4.cc.test”--->Run As--->Run Configurations.

          這種方式設置簡單,但靈活度不高,假如有100個測試類。我只想運行其中的某幾個測試類。下面看第二中方式。

           

          方法二

          方法引入一種“測試套件”的概念,JUnit提供了一種批量運行測試類的方法,叫測試套件。

            測試套件的寫法需要遵循以下原則:

            1. 創建一個空類作為測試套件的入口;

            2. 使用注解 org.junit.runner.RunWith 和 org.junit.runners.Suite.SuitClasses 修飾這個空類

            3. 將org.junit.runners.Suite作為參數傳入給注解RunWith,以提示Junit為此類測試使用套件運行器執行。

            4. 將需要放入此測試套件的測試類組成數組作為注解SuiteClasses的參數

            5. 保證這個空類使用public修飾,而且存在公開的不帶任何參數的構造函數

          下面在測試包(com.junit4.cc.test)下面創建一個測試類,內容如下:

          AllTest.java

           

          復制代碼
          package com.junit4.cc.test;


          import org.junit.runner.RunWith;
          import org.junit.runners.Suite;
          import org.junit.runners.Suite.SuiteClasses;
          @RunWith(Suite.
          class)
          @SuiteClasses({
          TTest.
          class,
          UserTest.
          class //這里自由加入需要運行的測試類
          })
          publicclass AllTest {

          }
          復制代碼

           

          創建之后的列表:

           

          運行AllTest.java的結果(這里,兩個方法的運行結果是一樣的):

           

          ps:關于兩種方式的比較,第一種方法簡單,只用選擇測試包,就可以批量運行里面的所有測試程序。第二種方式還有重新創建一個測試類,但它非常靈活,只用在這個類中加入需要運行的類就可以靈活的運行需要測試的類。

          posted @ 2012-08-09 14:24 奮斗成就男人 閱讀(199) | 評論 (0)編輯 收藏

          junit淺學筆記一

           JUnit是一個回歸測試框架(regression testing framework)。Junit測試是程序員測試,即所謂白盒測試,因為程序員知道被測試的軟件如何(How)完成功能和完成什么樣(What)的功能。Junit是一套框架,繼承TestCase類,就可以用Junit進行自動測試了。

               雖然大多情況下他是程序員的活,但作為測試人員還是有必要了解一下,畢竟也是測試工作,提高自己人技術,擴展思想是主要,邊學邊做筆記,這樣學過的東西才不會忘記,嘻嘻~!

           ========學習環境=================

          java編輯器: Eclipse SDK 3.5.6

          junit測試包:Eclipse中自帶了junit 4 測試包

          =================================

          1.我們打開eclipse 創建一個工程名字為:Junit4,

          創建一個包,命名為:com.junit4.cc ,

          包下面創建一個類 T

          代碼如下:

          復制代碼
          package com.junit4.cc;
          publicclass T {
          publicint add(int x ,int y){
          return x+y;
          }

          }
          復制代碼

          我們如何來做測試,當然了,上面的代碼一眼就可以看出結果,需要測試么,我們這里只是想說明問題,如果我們不用測試框架,我們會用寫一個main方法對上面的代碼進行驗證。全部代碼如下。

          復制代碼
          package com.junit4.cc;
          publicclass T {
          publicint add(int x ,int y){
          return x+y;
          }
          publicstaticvoid main(String args[]){
          int z=new T().add(3,5); //向T類傳遞兩個參數3和5
          System.out.println(z); //打印z進行查看3和5是否做了加法運算
          }
          }
          復制代碼

          云行上面的代碼,通過查看結果來判斷add方法是否正確。

          ---------------------------------------------------------------------------

          上面的單元測試有很多弊端:

          @ 需要花費很多的時間來寫測試代碼

          @ 測試代碼不可重用,一段測試代碼對應一段被測代碼。被測代碼變,測試代碼就沒用了

          @ 無法同時運行多個測試代碼。假如有一百個被測試代碼,要一個一個的運行測試代碼,用肉眼觀察結果,效率低還容易出錯。

          這是我簡單總結的幾個缺點。

          ---------------------------------------------------------------------------

           

          2.   那么我們就要使用單元測試框架來提交效率。

          下面我們就使用eclipse來創建一個測試。還是測試上面的代碼為例子。

          為了查看更加清晰,我們一般將測試代碼與被測試的代碼放在不同的包下面。

          我們在Junit工程下面重新創建一個包,命名為:com.junit4.cc.test

          ----------------------------

          創建一個測試類:TTest

          注意:這里要創建的是一個測試類:在com.junit4.cc.test包上面右鍵點擊-->new-->Junit test Case

          點擊“Next”會讓你選擇要測試的方法,選擇后點擊“Finish”則完成創建。

          創建完成如下圖:

          TTest.java代碼如下:

          復制代碼
          package com.junit4.cc.test;

          importstatic org.junit.Assert.*;

          import org.junit.Test;
          import com.junit4.cc.*;

          publicclass TTest {

          @Test
          publicvoid testAdd() {
          int z=new T().add(5,3);
          assertEquals(
          8,z);
          }

          }
          復制代碼

           

          3.   如果我們想要真正運行TTest.java這個測試類,還要對這個工程引入junit測試包。

          右鍵點擊工程(junit4)--->Properties

          點擊“next ” 按鈕,celipse提供junit3和junit4兩個測試包,我們選擇junit4 點擊“finish”就將測試包引入。

           

          4.  下面來運行我們TTest.java測試代碼。

          看到我們左側的綠色滾動條,說明我們的被代碼是沒有問題。

          你可以試著修改下面代碼的參數:

          int z=new T().add(5,3);  
            assertEquals(8,z);    //將5、3、8等數字任意修改,查看綠色滾動條的顏色,給出的提示是什么?

          posted @ 2012-08-09 14:23 奮斗成就男人 閱讀(146) | 評論 (0)編輯 收藏

          junit淺學筆記二

            上一節初步介紹了什么是單元測試,為什么要做單元測試,以及junit4的初步使用,這里我們接著說一下junit4中的注解。

            =============本節知識點============================

          *     Error和Failures

          *    Junit4 Annotation

          ==================================================================

           

          1.   在講注解之前,先來認識 Error和Failures這兩種錯誤有什么不同。

           

          Errors:表示程序本身錯誤

           

           

          @Test
          publicvoid testAdd() {
          int z=new T().add(5,3);
          assertEquals(
          8,z);
          int a=8/0; //這一句是有錯誤的
          }

           

          運行方法,會有一下錯誤提示:

          Failures: 是指測試失敗。

          @Test
          publicvoid testAdd() {
          int z=new T().add(5,4); //這里修改了數值,把4該為3就正確了
          assertEquals(
          8,z);
          }

          在來運行這個方法,看一下錯誤提示:

          所以,我們在寫測試程序的時候,要先保證Errors是沒有錯誤的,再來看Failures有沒有錯誤。

           

          2.  下面介紹junit4 的常用注解

          -----------------------------------------------------------------------------------------------

          *             @ Test:測試方法

                            A)  (expected=XXEception.class)

                          B)  (timeout=xxx)

          *.           @ Ignore: 被忽略的測試方法

          *.           @Before: 每一個測試方法之前云行。

          *.           @After : 每一個測試方法之后運行。

          *.           @BefreClass 所有測試開始之前運行。

          *.           @AfterClass 所有測試結果之后運行。

          ------------------------------------------------------------------------------------------------

          下面通過一個測試程序來解釋這些注解含義

          復制代碼
          package com.junit4.cc.test;

          importstatic org.junit.Assert.*;
          importstatic org.hamcrest.Matcher.*;

          import org.junit.Test;
          import com.junit4.cc.*;

          import org.junit.Before;
          import org.junit.BeforeClass;
          import org.junit.AfterClass;
          import org.junit.After;
          import org.junit.Ignore;


          publicclass TTest {

          @BeforeClass
          //的所有方法運行之前運行。
          publicstaticvoid beforeClass(){
          System.out.println(
          "------------beforeClass");
          }

          @AfterClass
          //在所有方法運行之后運行
          publicstaticvoid afterClass(){
          System.out.println(
          "-------------afterClass");
          }

          @Before
          //每個測試方法運行之前運行
          publicvoid before(){
          System.out.println(
          "=======before");
          }

          @After
          //每個測試方法運行之后運行
          publicvoid after(){
          System.out.println(
          "=======after");
          }

          @Test
          publicvoid testAdd() {
          int z=new T().add(5,3);
          assertEquals(
          8,z);
          System.out.println(
          "test Run through");
          }

          @Test ()
          publicvoid testdivision(){
          System.out.println(
          "in Test Division");

          }

          @Ignore
          //表示這個方法是不被運行的
          @Test
          (expected
          =java.lang.ArithmeticException.class,timeout=100) //timeout表示要求方法在100毫秒內運行完成,否則報錯
          publicvoid testDivide(){
          int z =new T().divide(8,2);
          }



          }
          復制代碼

          運行結果如下:

          標記紅星(*)方法在每個方法開始和結尾都運行一次。

          標記綠星(*)的方法只在所有方法的開始和結尾運行一次。

          junit有多種注解,我們常用的也就上面幾種。

          posted @ 2012-08-09 14:23 奮斗成就男人 閱讀(124) | 評論 (0)編輯 收藏

          LR有的JMeter也有之二“檢查點”

          檢查點:簡單的來理解一下,上一章講到,我們對用戶名和密碼進行了參數化,那么怎樣來判斷jmeter有沒有正確調用test.dat里面的文件呢。當然,我們可以從結果圖表中查看。但我還是想在“登錄”這個地方進行一下檢查。

          jmeter里面的檢查點通過添加斷言來完成。

          1.

          右鍵點擊我們的“登錄”頁面---->添加---->斷言---->響應斷言

          來設置一下斷言頁面,我們想斷言什么呢?調用的用戶名和密碼是不是我們test.dat文件里的用戶名和密碼,怎樣來進行呢。

           

          3.

          這里我們需要分別準備兩個文件,一個放用戶名,一個放密碼。

              

          下面編寫函數來調用這兩個文件,如何編寫先看我上一篇文章。

          在響應斷言頁面添加兩個“模式”

          (第三步還有一種方法,直接調用原來test.dat的數據進行檢查,我試了半天一直失敗,不知道原因在哪兒?)

          4.

          添加一個斷言結果

          右鍵點擊我們的“登錄”頁面---->添加---->監聽器---->斷言結果

          還可以再添加一個“查看結果樹” 右鍵點擊我們的“登錄”頁面---->添加---->監聽器---->查看結果樹

           

          在線程組中設置5個用戶,點擊運行運行。

          查看斷言結果:

          查看結果做:

          好了,檢查點添加成功!

          posted @ 2012-08-09 14:22 奮斗成就男人 閱讀(157) | 評論 (0)編輯 收藏

          LR有的JMeter也有之三“集合點”

          集合點:簡單來理解一下,雖然我們的“性能測試”理解為“多用戶并發測試”,但真正的并發是不存在的,為了更真實的實現并發這感念,我們可以在需要壓力的地方設置集合點,

          還拿那個用戶和密碼的地方,每到輸入用戶名和密碼登錄的地方,所有的虛擬用戶都相互之間等一等,然后,一起訪問。(紅軍排長說:等一等!大家一起沖啊!這樣給敵人的壓力是很大的。嘻嘻!)

          1.

          接著之前創建的腳本,右鍵點擊 step1---->定時器---->Synchronizing Timer

          這樣子就添加了一個“集合點”,下面來設置一下集合點。

           

          2.

          我們添加完之后的列表是這個樣子的,

           發現了沒,我們集合點的位置不對,應該在登錄的前面才對。怎么弄呢?

          點擊“synchronizing Timer”拖動到“登錄”面前的位置,不要松鼠標的左鍵,再點擊鼠標的右鍵,選擇在“之前插入”---有點難噢,慢慢來!

                   

          OK!!

          posted @ 2012-08-09 14:22 奮斗成就男人 閱讀(191) | 評論 (0)編輯 收藏

          僅列出標題
          共23頁: First 上一頁 15 16 17 18 19 20 21 22 23 下一頁 
          主站蜘蛛池模板: 麻阳| 大石桥市| 南汇区| 明光市| 信丰县| 偏关县| 荥阳市| 宣武区| 伊金霍洛旗| 留坝县| 泽库县| 双江| 乐清市| 平湖市| 西乌珠穆沁旗| 新龙县| 宣恩县| 广昌县| 阳曲县| 武川县| 嘉义县| 灵丘县| 阿勒泰市| 龙江县| 平定县| 大竹县| 吉安县| 大兴区| 广饶县| 琼结县| 余江县| 玛沁县| 新沂市| 获嘉县| 星座| 武安市| 太仆寺旗| 湘乡市| 阳山县| 阿克苏市| 普洱|