測(cè)試代碼把項(xiàng)目細(xì)分成模塊來(lái)檢查獨(dú)立的功能,避免項(xiàng)目整合的時(shí)候出現(xiàn)BUG而很難排錯(cuò),初學(xué)java在小程序里是體會(huì)不到測(cè)試的重要性,因?yàn)樾〕绦驇缀跻膊恍枰鰷y(cè)試,就算出錯(cuò)也是一目了然,很快就解決了,但是還要養(yǎng)成測(cè)試的習(xí)慣.在大型項(xiàng)目中如果沒(méi)有測(cè)試用例,那將是非??膳碌?
創(chuàng)新互聯(lián)公司專(zhuān)注于中大型企業(yè)的做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)和網(wǎng)站改版、網(wǎng)站營(yíng)銷(xiāo)服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開(kāi)發(fā)的融合,累計(jì)客戶上1000家,服務(wù)滿意度達(dá)97%。幫助廣大客戶順利對(duì)接上互聯(lián)網(wǎng)浪潮,準(zhǔn)確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運(yùn)用,我們將一直專(zhuān)注成都品牌網(wǎng)站建設(shè)和互聯(lián)網(wǎng)程序開(kāi)發(fā),在前進(jìn)的路上,與客戶一起成長(zhǎng)!
/**
*public?boolean?equals(String?s)?重點(diǎn)測(cè)試
*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()字符串長(zhǎng)度*/
System.out.println(str1.length());
/*public?boolean?startsWith(String?s)?endsWith()判斷是否以指定字符開(kāi)頭/結(jié)尾*/
bo=str1.startsWith("?");//空格
System.out.println(bo);
bo=str1.endsWith("H");
System.out.println(bo);
}
}
首先String類(lèi)java本來(lái)就提供?你莫非去重寫(xiě)方法?你覺(jué)得有必要?我們是搞應(yīng)用的?比如你學(xué)一門(mén)語(yǔ)言?你只要說(shuō)的流利就OK?人家才不關(guān)系你?對(duì)語(yǔ)法研究有多透徹?我寫(xiě)的?全是測(cè)試?不想寫(xiě)?類(lèi)?你真想要還不如去找源碼來(lái)看?更省事?人家都定義好了。
不說(shuō)了直接上圖?跟上面復(fù)制的一樣
和內(nèi)容一樣!
你這說(shuō)的太籠統(tǒng)了,應(yīng)該具體些。
有了Java代碼之后
1、可以在代碼中寫(xiě)些測(cè)試的方法,把你想要驗(yàn)證的東西,輸出看一下。
2、可以用Debug的形式,跟蹤代碼執(zhí)行,驗(yàn)證程序的邏輯是否正確。
3、利用JUnit寫(xiě)斷言,測(cè)試結(jié)果
import java.util.*;
public class Admin {//管理類(lèi)
Scanner in=new Scanner(System.in);
String msg="\t編號(hào)\t姓名\t年齡\tJava\tC#\tHtml\tSql\t總分\t平均分";
public void print(Student[] arr){//輸出方法
System.out.println(msg);
for(int i=0;iarr.length;i++){
if(arr[i]!=null){
arr[i].setSum();
arr[i].setAvg();
System.out.println(arr[i]);
}
}
}
public boolean exist(int num,Student stu){//判斷存在方法
if(stu!=null){
if(stu.getNum()==num){
return true;
}else{
return false;
}
}
return false;
}
public void create(String name,int age,Student[] arr){//添加方法
Student stu=new Student();
stu.setName(name);
stu.setAge(age);
int i=this.setIndex(arr);
stu.setNum(i);
if(i==9999){
System.out.println("添加學(xué)生人數(shù)已達(dá)到上限,不能再添加了!");
}else{
arr[i]=stu;
}
this.print(arr);
}
public int setIndex(Student[] arr){// 返回下標(biāo)
for(int i=0;iarr.length;i++){
if(arr[i]==null){
return i;
}
}
return 9999;
}
public void select(int num,Student[] arr){//查找方法
System.out.println(msg);
for(int i=0;iarr.length;i++){
/*if(arr[i]!=null){
if(arr[i].getNum()==num){
System.out.println(arr[i]);
return;
}
}*/
if(this.exist(num, arr[i])){
System.out.println(arr[i]);
return;
}
}
System.out.println("\t---!沒(méi)有這個(gè)學(xué)生的存在!---\t");
}
public void update(int num,Student[] arr){//更新方法
for(int i=0;iarr.length;i++){
if(this.exist(num, arr[i])){
System.out.println("請(qǐng)輸入修改的姓名:");
arr[i].setName(in.next());
System.out.println("請(qǐng)輸入修改的年齡:");
arr[i].setAge(in.nextInt());
System.out.println("---更新信息成功---");
this.print(arr);
return;
}
}
System.out.println("---更新信息失敗---");
}
public void delete(int num,Student[] arr){//刪除方法
for(int i=0;iarr.length;i++){
if(this.exist(num, arr[i])){
arr[i]=null;
System.out.println("---刪除信息成功---");
this.print(arr);
return;
}
}
System.out.println("---刪除信息失敗---");
}
public void input(int num,Student[] arr){//輸入方法
for(int i=0;iarr.length;i++){
if(this.exist(num, arr[i])){
System.out.println("請(qǐng)輸入"+arr[i].getName()+"學(xué)生的java成績(jī):");
if(in.hasNextInt()){
arr[i].setJava(in.nextInt());
}
//arr[i].setJava(in.nextInt());
System.out.println("請(qǐng)輸入"+arr[i].getName()+"學(xué)生的c_sharp成績(jī):");
if(in.hasNextInt()){
arr[i].setC_sharp(in.nextInt());
}
//arr[i].setC_sharp(in.nextInt());
System.out.println("請(qǐng)輸入"+arr[i].getName()+"學(xué)生的html成績(jī):");
if(in.hasNextInt()){
arr[i].setHtml(in.nextInt());
}
//arr[i].setHtml(in.nextInt());
System.out.println("請(qǐng)輸入"+arr[i].getName()+"學(xué)生的sql成績(jī):");
if(in.hasNextInt()){
arr[i].setSql(in.nextInt());
}
//arr[i].setSql(in.nextInt());
this.print(arr);
break;
}
}
}
public void couseSort(int num,Student[] arr){//學(xué)科排序方法
if(num==1){
for(int i=0;iarr.length-1;i++){
for(int j=i+1;jarr.length;j++){
if(arr[i]!=nullarr[j]!=null){
if(arr[i].getJava()arr[j].getJava()){
Student t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
}
}
}else if(num==2){
for(int i=0;iarr.length;i++){
for(int j=i+1;jarr.length;j++){
if(arr[i]!=nullarr[j]!=null){
if(arr[i].getC_sharp()arr[j].getC_sharp()){
Student t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
}
}
}else if(num==3){
for(int i=0;iarr.length;i++){
for(int j=i+1;jarr.length;j++){
if(arr[i]!=nullarr[j]!=null){
if(arr[i].getHtml()arr[j].getHtml()){
Student t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
}
}
}else if(num==4){
for(int i=0;iarr.length;i++){
for(int j=i+1;jarr.length;j++){
if(arr[i]!=nullarr[j]!=null){
if(arr[i].getSql()arr[j].getSql()){
Student t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
}
}
}
this.print(arr);
}
public void sumSort(Student[] arr){//總分排序方法
for(int i=0;iarr.length;i++){
for(int j=i+1;jarr.length;j++){
if(arr[i]!=nullarr[j]!=null){
if(arr[i].getSum()arr[j].getSum()){
Student t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
}
}
this.print(arr);
}
}
public class Student {//學(xué)生類(lèi)
private int num;
private String name;
private int age;
private int java;
private int c_sharp;
private int html;
private int sql;
private int sum;
private double avg;
public int getNum(){
return num;
}
public void setNum(int num){
this.num=num;
}
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;
}
public int getJava() {
return java;
}
public void setJava(int java) {
this.java = java;
}
public int getC_sharp() {
return c_sharp;
}
public void setC_sharp(int c_sharp) {
this.c_sharp = c_sharp;
}
public int getHtml() {
return html;
}
public void setHtml(int html) {
this.html = html;
}
public int getSql() {
return sql;
}
public void setSql(int sql) {
this.sql = sql;
}
public int getSum() {
return sum;
}
public void setSum() {
this.sum =this.java+this.c_sharp+this.html+this.sql;
}
public double getAvg() {
return avg;
}
public void setAvg() {
this.avg = this.sum/4;
}
public String toString(){
String msg="\t"+this.num+"\t"+this.name+"\t"+this.age+"\t"+this.java+"\t"+this.c_sharp+"\t"+this.html+"\t"+this.sql+"\t"+this.sum+"\t"+this.avg+"\t";
return msg;
}
}
import java.util.*;
public class Main {//主
public static void main(String[] args){
Scanner in=new Scanner(System.in);
System.out.println("---請(qǐng)定義學(xué)生的人數(shù)---");
Student[] stuArr=new Student[in.nextInt()];
Admin adminStu=new Admin();
while(true){
System.out.println("---選擇你要執(zhí)行的功能---");
System.out.println("0:添加一個(gè)學(xué)生");
System.out.println("1:查找一個(gè)學(xué)生");
System.out.println("2:根據(jù)編號(hào)更新信息");
System.out.println("3:根據(jù)編號(hào)刪除學(xué)生");
System.out.println("4:根據(jù)編號(hào)輸入成績(jī)");
System.out.println("5:根據(jù)某門(mén)學(xué)科排序");
System.out.println("6:根據(jù)總分進(jìn)行排序");
System.out.println("7:退出系統(tǒng)");
//int number =in.nextInt();//判斷
String opt=in.next();
if(opt.equals("0")){
System.out.println("---執(zhí)行添加方法---");
System.out.println("請(qǐng)輸入學(xué)生的姓名:");
String name=in.next();
System.out.println("請(qǐng)輸入學(xué)生的年齡:");
int age=in.nextInt();
adminStu.create(name,age,stuArr);
//adminStu.print(stuArr);
}else if(opt.equals("1")){
System.out.println("---執(zhí)行查找方法---");
System.out.println("請(qǐng)輸入學(xué)生的編號(hào):");
int num=in.nextInt();
adminStu.select(num, stuArr);
}else if(opt.equals("2")){
System.out.println("---執(zhí)行更新方法---");
System.out.println("請(qǐng)輸入學(xué)生的編號(hào):");
int num=in.nextInt();
/*System.out.println("請(qǐng)輸入修改的姓名:");
String name=in.next();
System.out.println("請(qǐng)輸入修改的年齡:");
int age=in.nextInt();*/
adminStu.update(num, stuArr);
//adminStu.print(stuArr);
}else if(opt.equals("3")){
System.out.println("---執(zhí)行刪除方法---");
System.out.println("請(qǐng)輸入學(xué)生的編號(hào):");
int num=in.nextInt();
adminStu.delete(num, stuArr);
//adminStu.print(stuArr);
} else if(opt.equals("4")){
System.out.println("---執(zhí)行輸入方法---");
System.out.println("請(qǐng)輸入學(xué)生的編號(hào):");
int num=in.nextInt();
adminStu.input(num, stuArr);
}else if(opt.equals("5")){
System.out.println("---執(zhí)行學(xué)科排序方法---");
System.out.println("請(qǐng)選擇需排序的學(xué)科:1.java、2.c_sharp、3.html、4.sql");
int num=in.nextInt();
adminStu.couseSort(num, stuArr);
}else if(opt.equals("6")){
System.out.println("---執(zhí)行總分排序方法---");
adminStu.sumSort(stuArr);
}else if(opt.equals("7")){
System.out.println("--程序已退出--");
//break;//退出循環(huán)
System.exit(0);//退出程序
}
}
}
}
這是我以前編寫(xiě)的一個(gè)微型學(xué)生管理系統(tǒng),希望可以給你點(diǎn)思路。休息時(shí)間不多就懶。
偽代碼就是你初步的構(gòu)思 你把代碼的大概寫(xiě)了出來(lái),里面你沒(méi)有寫(xiě)的用漢語(yǔ)標(biāo)明了這行代碼有些什么
測(cè)試代碼就是單獨(dú)寫(xiě)的一個(gè)類(lèi)或者方法,這個(gè)類(lèi)或方法調(diào)用你已經(jīng)寫(xiě)好的代碼,并輸入一些數(shù)據(jù)進(jìn)行驗(yàn)證你的代碼!一般有單元測(cè)試和main方法測(cè)試!
真實(shí)代碼就是你把偽代碼實(shí)現(xiàn)了,并且通過(guò)測(cè)試代碼!
這是在下的理解!
1、Jasmine
Jasmine是一個(gè)行為驅(qū)動(dòng)的測(cè)試開(kāi)發(fā)框架,用于對(duì)JavaScript代碼進(jìn)行測(cè)試。它不依賴其它任何JavaScript框架,也不需要DOM。它的語(yǔ)法簡(jiǎn)潔、明確,寫(xiě)測(cè)試非常容易。
2、Mocha
Mocha是一個(gè)功能豐富的JavaScript測(cè)試框架,既運(yùn)行于Node.js環(huán)境中,也可以運(yùn)行于瀏覽器環(huán)境中。Mocha以串行方式運(yùn)行測(cè)試,能做出靈活而準(zhǔn)確的報(bào)告,也能將測(cè)試中未捕捉的異常映射到正確的測(cè)試用例。
3、Chai
Chai是個(gè)支持BDD/TDD的庫(kù),可用于node和瀏覽器,可配合任何JavaScript測(cè)試框架使用。
4、QUnit
QUnit是個(gè)功能強(qiáng)大又易于使用的JavaScript單元測(cè)試框架。jQuery、jQueryUI和jQueyMobile項(xiàng)目都使用這個(gè)框架,它能測(cè)試普通的JavaScript代碼。
5、Sinon
Sinon.JS為JavaScript提供了獨(dú)立的spies、stubs和mocks[譯者注:Spy、Stub和Mock都是測(cè)試專(zhuān)用名詞,Stub常被翻譯為樁,spies是Spy的復(fù)數(shù)形式,是一種可以監(jiān)視方法、調(diào)用和參數(shù)的技術(shù)]。它不依賴任何東西,可以配合任何單元測(cè)試框架工作。
6、Karma
Karma是針對(duì)連通瀏覽器的一個(gè)框架無(wú)關(guān)測(cè)試運(yùn)行器。每一個(gè)測(cè)試結(jié)果對(duì)應(yīng)每個(gè)瀏覽器,它的測(cè)試和顯示都是通過(guò)命令行暴露給開(kāi)發(fā)者的,這樣他們就可以看到瀏覽器測(cè)試的通過(guò)或失敗。
7、Selenium
Selenium有一個(gè)簡(jiǎn)單的目標(biāo):就是自動(dòng)化瀏覽器。它主要用于自動(dòng)化測(cè)試web應(yīng)用程序,但是只是很簡(jiǎn)單地考慮到了基于網(wǎng)絡(luò)的管理任務(wù)。
8、WebdriverIO
WebdriverIO允許用戶僅添加幾行代碼就可以控制瀏覽器或移動(dòng)應(yīng)用程序,使測(cè)試代碼更簡(jiǎn)單、簡(jiǎn)潔、易讀。集成的TestRunner同樣允許你以同步的方式調(diào)用異步命令,這樣你不需要關(guān)心如何處理Promise以避免競(jìng)態(tài)條件。此外,它取消了所有的繁瑣的設(shè)置工作,并且會(huì)為您管理的Selenium會(huì)話。
9、Nightwatch
Nightwatch.js是一個(gè)易于使用的Node.js,它是為基于瀏覽器的app和網(wǎng)站設(shè)計(jì)的終端到終端(E2E)的測(cè)試方法。它使用強(qiáng)大的W3CWebDriverAPI,用于在DOM元素上執(zhí)行命令和斷言。
10、PhantomCSS
PhantomCSS獲得CasperJS捕獲的屏幕截圖,并使用Resemble.js將其與基準(zhǔn)圖進(jìn)行對(duì)比,以測(cè)試RGB像素差異。java課程發(fā)現(xiàn)PhantomCSS然后生成圖像差異對(duì)比,用于幫助您找到原因。
11、PhantomFlow
PhantomFlow使用決策樹(shù)提供UI測(cè)試方案。針對(duì)PhantomJS,CasperJS和PhantomCSS的NodeJS包裝器——PhantomFlow能夠流暢地在代碼中描述用戶流程,同時(shí)生成用于可視化的結(jié)構(gòu)化樹(shù)數(shù)據(jù)。