測試代碼把項目細(xì)分成模塊來檢查獨立的功能,避免項目整合的時候出現(xiàn)BUG而很難排錯,初學(xué)java在小程序里是體會不到測試的重要性,因為小程序幾乎也不需要做測試,就算出錯也是一目了然,很快就解決了,但是還要養(yǎng)成測試的習(xí)慣.在大型項目中如果沒有測試用例,那將是非??膳碌?
在路北等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需設(shè)計,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,網(wǎng)絡(luò)營銷推廣,外貿(mào)網(wǎng)站建設(shè),路北網(wǎng)站建設(shè)費用合理。
--------------------------DateUtil類
/**
* @author 王炳焱
* 創(chuàng)建日期:2007-5-21
* 項目名稱:te
* 文件名稱:DateUtil
*/
package test0521;
/**
* @author Administrator
*
*/
public class DateUtil {
public int year;// 用于表示年份
public int month;// 用于表示月份
public int day;// 用于表示天數(shù)
private boolean isLeapYear = false;// 用于表示是否為閏年.初始值為false
DateUtil() {
}
DateUtil(int year, int month) {// 用于初始化year變量和month變量
this.year = year;
this.month = month;
}
public boolean isLeapYear() {// 用于判斷年份是否為閏年
this.isLeapYear = (this.year % 4 == 0 this.year % 100 != 0)
|| (this.year % 400 == 0);//閏年條件
return this.isLeapYear;
}
public int getMonthDays() {// 用于計算并取得該月的天數(shù)
int[] bigMonth = { 1, 3, 5, 7, 8, 10, 12 };//31天的月份
for (int i = 0; i bigMonth.length; i++) {
if (this.month == bigMonth[i]) {
this.day = 31;
return this.day;
}
}
if (this.month == 2 this.isLeapYear()) {//閏年2月
this.day = 29;
return this.day;
}
if (this.month == 2) {//平年2月
this.day = 28;
return this.day;
}
this.day = 30;//除去31天的月份和2月,其他月份都為30天
return this.day;
}
}
---------------Test類
/**
* @author 王炳焱
* 創(chuàng)建日期:2007-5-21
* 項目名稱:te
* 文件名稱:Test
*/
package test0521;
/**
* @author Administrator
*
*/
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自動生成方法存根
DateUtil dateUtil = new DateUtil(2008, 1);//輸入年份與月份
String str = "平年";
if (dateUtil.isLeapYear()) {//根據(jù)判斷閏年返回布爾值生成對應(yīng)字符串
str = "閏年";
}
System.out.println(dateUtil.year + "年為"+str);
System.out.println(dateUtil.month + "月有" + dateUtil.getMonthDays()+ "天");
}
}
你這說的太籠統(tǒng)了,應(yīng)該具體些。
有了Java代碼之后
1、可以在代碼中寫些測試的方法,把你想要驗證的東西,輸出看一下。
2、可以用Debug的形式,跟蹤代碼執(zhí)行,驗證程序的邏輯是否正確。
3、利用JUnit寫斷言,測試結(jié)果
/**
*public?boolean?equals(String?s)?重點測試
*public?boolean?contains(String?s)
*public?int?indexOf?(String?str)
*public?String?substring(int?startpoint)
*public?String?trim()
*public?int?length()
*public?boolean?startsWith(String?s)?endsWith()
*?@author?Administrator
*
*/
public?class?Demo1?{
public?static?void?main(String[]?args)?{
/*public?boolean?equals(String?s)用于比較字符串的值是否相等*/
String?str1?=?"??Hello?World!??";
String?str2?=?"你好!";
String?str3?=?"??Hello?World!??";
String?str4?=?"H";
boolean?bo;
int?index;
bo?=?str1.equals(str2)?true:false;//值相等返回true否則false
System.out.println(bo);
bo?=?str1.equals(str3)?true:false;
System.out.println(bo);
/*public?boolean?contains(String?s)字符串的包含關(guān)系*/
bo?=?str1.contains(str2)?true:false;
System.out.println(bo);
bo?=?str1.contains(str4)?true:false;
System.out.println(bo);
/*public?int?indexOf?(String?str)獲取指定字符串第一次出現(xiàn)的下標(biāo)*/
index=str1.indexOf("H");
System.out.println(index);
/*public?String?substring(int?startpoint)獲取指定下標(biāo)到結(jié)束的所有字符含指定下標(biāo)的字符*/
String?str5=str1.substring(4);
System.out.println(str5);
/*public?String?trim()去掉頭尾空格但不能去掉中間的*/
System.out.println(str1.trim());
/*public?int?length()字符串長度*/
System.out.println(str1.length());
/*public?boolean?startsWith(String?s)?endsWith()判斷是否以指定字符開頭/結(jié)尾*/
bo=str1.startsWith("?");//空格
System.out.println(bo);
bo=str1.endsWith("H");
System.out.println(bo);
}
}
首先String類java本來就提供?你莫非去重寫方法?你覺得有必要?我們是搞應(yīng)用的?比如你學(xué)一門語言?你只要說的流利就OK?人家才不關(guān)系你?對語法研究有多透徹?我寫的?全是測試?不想寫?類?你真想要還不如去找源碼來看?更省事?人家都定義好了。
不說了直接上圖?跟上面復(fù)制的一樣
和內(nèi)容一樣!
一:創(chuàng)建一個測試類,建議將測試類單獨放在一個包中(在 maven 項目里有測試類專門的存放位置),新建一個Junit Test Case類,下一步?
測試類的命名建議是你將要測試的類名+Test,然后點 Browse, 你可以選擇要進(jìn)行測試的類(一般選擇 Service, 因為 Service 關(guān)心的是業(yè)務(wù)需求),用這種方式創(chuàng)建可以自動生成要測試類的測試類,你只需要進(jìn)行測試代碼的書寫.
@Test
public void testqueryById(){
} ? ?@Test
public void testQueryAll(){
} ? ?@Test
public void testReduceNumber(){
}123456789101112
如果里面有自動生成的代碼,刪除或注釋即可…
二:配置 spring 和 junit 整合, junit 啟動時加載 springIOC 容器,這里你需要 Spring-test jar包
@RunWith(SpringJUnit4ClassRunner.class) ? ?//告訴junitspring配置文件
@ContextConfiguration(locations = {"classpath:spring/spring-dao.xml"})123
同樣的,在測試類中我們會調(diào)用 Service 的邏輯,由于我們使用的是 Spring+SpringMVC+ 持久化框架,所以要注入一個 IService 接口(這里我直接對 DAO 進(jìn)行測試了)
@Autowired
private SeckillDao seckillDao;12
接下來是測試邏輯,在編寫測試代碼之前建議覆蓋實體中的 toString 方法,不然打印會很麻煩.
@Test ? ?public void testqueryById(){ ? ? ? ?long id = 1000;
Seckill seckill = seckillDao.queryById(id);
System.out.println(seckill.getSeckillName());
System.out.println(seckill);
} ? ?//JAVA沒有保存形參的記錄,如果你在 dao 中傳了多個參數(shù),那么需要聲明它的形參對應(yīng)的實參,否則 JVM 會顯示找不到參數(shù).聲明方式稍后奉上
@Test ? ?public void testQueryAll(){
ListSeckill seckills = seckillDao.queryAll(0, 100); ? ? ? ?for(Seckill seckill:seckills){
System.out.println(seckill);
}
}
@Test ? ?public void testReduceNumber(){
Date killTime = new Date(); ? ? ? ?//對增加進(jìn)行測試的時候,只要數(shù)據(jù)庫增加了一條數(shù)據(jù),我們就默認(rèn)這個方法執(zhí)行成功了
int updateCount = seckillDao.reduceNumber(1000L, killTime);
System.out.println("updateCount = "+updateCount);
}123456789101112131415161718192021222324
解決JAVA不保存形參的記錄
int reduceNumber(@Param("seckillId")long seckillId,@Param("killTime")Date killTime);
Seckill queryById(long seckillId); ? ?/**
* mysql的分頁查詢
* @param offset 告訴它實際的形參
* @param limit
* @return
*/
ListSeckill queryAll(@Param("offset")int offset,@Param("limit")int limit);1234567891011
接下來我們根據(jù)他返回的結(jié)果和我們想要的結(jié)果對應(yīng)就可以了. 測試類不用部署項目, 測試周期非常短, 而且可以進(jìn)行專項測試. 測試類代碼邏輯十分簡單, 幾乎不會出錯. 如果結(jié)果不是預(yù)期的, 那么根據(jù)你的需求修改!?
當(dāng)然, 它的局限性也很打. 從單元測試不能看出頁面?zhèn)髦档腻e誤, 許多項目在服務(wù)器中的表現(xiàn)也不能模擬.?
那么我們什么時候用junit呢??
當(dāng)你的數(shù)據(jù)庫操作非常復(fù)雜, 你不確定能輸出你想要的值的時候, 相比用 debug 調(diào)試, 使用 Junit 是更方便的手段.或者新手出錯概率非常大, 也不用在服務(wù)器中專門測試項目的表現(xiàn), Junit 是個必備的工具!而且測試類的測試代碼重用性很高.?
如果你的數(shù)據(jù)和預(yù)期相悖, 那么修改業(yè)務(wù)邏輯; 否則, 查看頁面是否有錯! Junit在一定程度上減輕了我們業(yè)務(wù)代碼調(diào)試的壓力, 讓我們關(guān)注于一點解決錯誤.
import java.sql.Timestamp;
import java.util.Date;
public class JavaMain {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Date date=new Date();
long ldate=date.getTime();
Timestamp tt=new Timestamp(ldate);
System.out.println(ldate);
System.out.println(tt);
char c='a';
char a='我';
System.out.println(a+1);
System.out.println(c+1);
}
}