成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

java中測試代碼大全 Java測試代碼

怎么寫Java測試代碼?

可以用main函數(shù)和JUnit來寫測試代碼。main是最早使用的,但是現(xiàn)在更流行的測試工具是JUnit。

成都創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的河池網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

JUnit是一個Java語言的單元測試框架。它由Kent Beck和Erich Gamma建立,逐漸成為源于Kent Beck的sUnit的xUnit家族中最為成功的一個。 JUnit有它自己的JUnit擴展生態(tài)圈。多數(shù)Java的開發(fā)環(huán)境都已經(jīng)集成了JUnit作為單元測試的工具。

下面是一些具體的編寫測試代碼的技巧或較好的實踐方法:

1. 不要用TestCase的構(gòu)造函數(shù)初始化Fixture,而要用setUp()和tearDown()方法。

2. 不要依賴或假定測試運行的順序,因為JUnit利用Vector保存測試方法。所以不同的平臺會按不同的順序從Vector中取出測試方法。

3. 避免編寫有副作用的TestCase。例如:如果隨后的測試依賴于某些特定的交易數(shù)據(jù),就不要提交交易數(shù)據(jù)。簡單的回滾就可以了。

4. 當(dāng)繼承一個測試類時,記得調(diào)用父類的setUp()和tearDown()方法。

5. 將測試代碼和工作代碼放在一起,一邊同步編譯和更新。(使用Ant中有支持junit的task.)

6. 測試類和測試方法應(yīng)該有一致的命名方案。如在工作類名前加上test從而形成測試類名。

7. 確保測試與時間無關(guān),不要依賴使用過期的數(shù)據(jù)進行測試。導(dǎo)致在隨后的維護過程中很難重現(xiàn)測試。

8. 如果你編寫的軟件面向國際市場,編寫測試時要考慮國際化的因素。不要僅用母語的Locale進行測試。

9. 盡可能地利用JUnit提供地assert/fail方法以及異常處理的方法,可以使代碼更為簡潔。

10.測試要盡可能地小,執(zhí)行速度快。

11.不要硬性規(guī)定數(shù)據(jù)文件的路徑。

12.利用Junit 的自動異常處理書寫簡潔的測試代碼

事實上在Junit 中使用try-catch 來捕獲異常是沒有必要的,Junit 會自動捕獲異常。那些沒有被捕獲的異常就被當(dāng)成錯誤處理。

13. 充分利用Junit 的assert/fail 方法

assertSame()用來測試兩個引用是否指向同一個對象

assertEquals()用來測試兩個對象是否相等

14. 確保測試代碼與時間無關(guān)

15. 使用文檔生成器做測試文檔。

java中判斷一個字符串是否是1到20的整數(shù)有什么好方法嗎,求大神指教

方式一:通過正則表達式

Java代碼

/***

* 判斷 String 是否int

*

* @param input

* @return

*/

public static boolean isInteger(String input){

Matcher mer = Pattern.compile("^[0-9]+$").matcher(input);

return mer.find();

}

上述方法不完善,不能識別負(fù)數(shù),比如識別不了“-9”,“+9”。多謝大家指教,改進如下:

Java代碼

/***

* 判斷 String 是否是 int

*

* @param input

* @return

*/

public static boolean isInteger(String input){

Matcher mer = Pattern.compile("^[+-]?[0-9]+$").matcher(input);

return mer.find();

}

測試代碼如下:

Java代碼

@Test

public void test_isInteger(){

String input="123";

System.out.println(input+":"+ValueWidget.isInteger(input) );

input="000000000000009";

System.out.println(input+":"+ValueWidget.isInteger(input) );

input="-9";

System.out.println(input+":"+ValueWidget.isInteger(input) );

input="-09";

System.out.println(input+":"+ValueWidget.isInteger(input) );

input="--9";

System.out.println(input+":"+ValueWidget.isInteger(input) );

}

運行結(jié)果:

123:true

000000000000009:true

-9:true

-09:true

--9:false

方式二:通過java 的異常

Java代碼

public static boolean isValidInt(String value) {

try {

Integer.parseInt(value);

} catch (NumberFormatException e) {

return false;

}

return true;

}

java中的單例模式的代碼怎么寫

我從我的博客里把我的文章粘貼過來吧,對于單例模式模式應(yīng)該有比較清楚的解釋:

單例模式在我們?nèi)粘5捻椖恐惺殖R?,?dāng)我們在項目中需要一個這樣的一個對象,這個對象在內(nèi)存中只能有一個實例,這時我們就需要用到單例。

一般說來,單例模式通常有以下幾種:

1.饑漢式單例

public class Singleton {

private Singleton(){};

private static Singleton instance = new Singleton();

public static Singleton getInstance(){

return instance;

}

}

這是最簡單的單例,這種單例最常見,也很可靠!它有個唯一的缺點就是無法完成延遲加載——即當(dāng)系統(tǒng)還沒有用到此單例時,單例就會被加載到內(nèi)存中。

在這里我們可以做個這樣的測試:

將上述代碼修改為:

public class Singleton {

private Singleton(){

System.out.println("createSingleton");

};

private static Singleton instance = new Singleton();

public static Singleton getInstance(){

return instance;

}

public static void testSingleton(){

System.out.println("CreateString");

}

}

而我們在另外一個測試類中對它進行測試(本例所有測試都通過Junit進行測試)

public class TestSingleton {

@Test

public void test(){

Singleton.testSingleton();

}

}

輸出結(jié)果:

createSingleton

CreateString

我們可以注意到,在這個單例中,即使我們沒有使用單例類,它還是被創(chuàng)建出來了,這當(dāng)然是我們所不愿意看到的,所以也就有了以下一種單例。

2.懶漢式單例

public class Singleton1 {

private Singleton1(){

System.out.println("createSingleton");

}

private static Singleton1 instance = null;

public static synchronized Singleton1 getInstance(){

return instance==null?new Singleton1():instance;

}

public static void testSingleton(){

System.out.println("CreateString");

}

}

上面的單例獲取實例時,是需要加上同步的,如果不加上同步,在多線程的環(huán)境中,當(dāng)線程1完成新建單例操作,而在完成賦值操作之前,線程2就可能判

斷instance為空,此時,線程2也將啟動新建單例的操作,那么多個就出現(xiàn)了多個實例被新建,也就違反了我們使用單例模式的初衷了。

我們在這里也通過一個測試類,對它進行測試,最后面輸出是

CreateString

可以看出,在未使用到單例類時,單例類并不會加載到內(nèi)存中,只有我們需要使用到他的時候,才會進行實例化。

這種單例解決了單例的延遲加載,但是由于引入了同步的關(guān)鍵字,因此在多線程的環(huán)境下,所需的消耗的時間要遠(yuǎn)遠(yuǎn)大于第一種單例。我們可以通過一段測試代碼來說明這個問題。

public class TestSingleton {

@Test

public void test(){

long beginTime1 = System.currentTimeMillis();

for(int i=0;i100000;i++){

Singleton.getInstance();

}

System.out.println("單例1花費時間:"+(System.currentTimeMillis()-beginTime1));

long beginTime2 = System.currentTimeMillis();

for(int i=0;i100000;i++){

Singleton1.getInstance();

}

System.out.println("單例2花費時間:"+(System.currentTimeMillis()-beginTime2));

}

}

最后輸出的是:

單例1花費時間:0

單例2花費時間:10

可以看到,使用第一種單例耗時0ms,第二種單例耗時10ms,性能上存在明顯的差異。為了使用延遲加載的功能,而導(dǎo)致單例的性能上存在明顯差異,

是不是會得不償失呢?是否可以找到一種更好的解決的辦法呢?既可以解決延遲加載,又不至于性能損耗過多,所以,也就有了第三種單例:

3.內(nèi)部類托管單例

public class Singleton2 {

private Singleton2(){}

private static class SingletonHolder{

private static Singleton2 instance=new Singleton2();

}

private static Singleton2 getInstance(){

return SingletonHolder.instance;

}

}

在這個單例中,我們通過靜態(tài)內(nèi)部類來托管單例,當(dāng)這個單例被加載時,不會初始化單例類,只有當(dāng)getInstance方法被調(diào)用的時候,才會去加載

SingletonHolder,從而才會去初始化instance。并且,單例的加載是在內(nèi)部類的加載的時候完成的,所以天生對線程友好,而且也不需要

synchnoized關(guān)鍵字,可以說是兼具了以上的兩個優(yōu)點。

4.總結(jié)

一般來說,上述的單例已經(jīng)基本可以保證在一個系統(tǒng)中只會存在一個實例了,但是,仍然可能會有其他的情況,導(dǎo)致系統(tǒng)生成多個單例,請看以下情況:

public class Singleton3 implements Serializable{

private Singleton3(){}

private static class SingletonHolder{

private static Singleton3 instance = new Singleton3();

}

public static Singleton3 getInstance(){

return SingletonHolder.instance;

}

}

通過一段代碼來測試:

@Test

public void test() throws Exception{

Singleton3 s1 = null;

Singleton3 s2 = Singleton3.getInstance();

//1.將實例串行話到文件

FileOutputStream fos = new FileOutputStream("singleton.txt");

ObjectOutputStream oos =new ObjectOutputStream(fos);

oos.writeObject(s2);

oos.flush();

oos.close();

//2.從文件中讀取出單例

FileInputStream fis = new FileInputStream("singleton.txt");

ObjectInputStream ois = new ObjectInputStream(fis);

s1 = (Singleton3) ois.readObject();

if(s1==s2){

System.out.println("同一個實例");

}else{

System.out.println("不是同一個實例");

}

}

輸出:

不是同一個實例

可以看到當(dāng)我們把單例反序列化后,生成了多個不同的單例類,此時,我們必須在原來的代碼中加入readResolve()函數(shù),來阻止它生成新的單例

public class Singleton3 implements Serializable{

private Singleton3(){}

private static class SingletonHolder{

private static Singleton3 instance = new Singleton3();

}

public static Singleton3 getInstance(){

return SingletonHolder.instance;

}

//阻止生成新的實例

public Object readResolve(){

return SingletonHolder.instance;

}

}

再次測試時,就可以發(fā)現(xiàn)他們生成的是同一個實例了。

關(guān)于java面向?qū)ο蟮膯卧獪y試。測試類應(yīng)該怎么寫?具體代碼如下

可以用main方法(主方法)進行單元測試

或者使用@Junit 家在方法上面

分享題目:java中測試代碼大全 Java測試代碼
文章鏈接:http://jinyejixie.com/article12/dodhogc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、App開發(fā)、網(wǎng)站設(shè)計、面包屑導(dǎo)航、網(wǎng)站維護標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
怀仁县| 荔浦县| 彭山县| 榕江县| 台湾省| 哈密市| 临泽县| 贡觉县| 陆河县| 奉新县| 柳林县| 扎鲁特旗| 宿州市| 呼和浩特市| 新田县| 新河县| 观塘区| 杭锦后旗| 綦江县| 高雄市| 右玉县| 鄱阳县| 云龙县| 遵化市| 锡林郭勒盟| 独山县| 巴青县| 禄丰县| 德昌县| 吉木乃县| 孝义市| 封丘县| 泗水县| 漠河县| 神池县| 宁海县| 外汇| 阿拉善右旗| 社会| 平乐县| 五寨县|