文件名:Calutor.java
package com.sc.zy;
public class Calutor {
public int add(int num1,int num2){
return num1+num2;
}
public int sub(int num1,int num2){
return num1-num2;
}
public int mul(int num1,int num2){
return num1*num2;
}
public int div(int num1,int num2){
if(num2==0){
throw new MyException();
}
return num1/num2;
}
}
文件名:MyException.Java
package com.sc.zy;
public class MyException extends RuntimeException {
}
文件名:CalutorTest.java
package com.sc.zy;
import junit.framework.Assert;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
public class CalutorTest {
private Calutor c;
@BeforeClass
public static void setUpBeforeClass(){
System.out.println("=====static init=======");
}
@AfterClass
public static void tearDownAfterClass(){
System.out.println("=====static destory=======");
}
@Before
public void setUp(){
System.out.println("=======@before=======");
c=new Calutor();
}
@After
public void tearDown(){
System.out.println("=======@after=======");
}
@Test
public void testAdd(){
int sum=c.add(1, 2);
Assert.assertEquals(3, sum);
}
@Test(expected=com.sc.zy.MyException.class)
public void testDiv(){
c.div(1, 0);
}
@Ignore
public void testDiv1(){
int d=c.div(1, 5);
Assert.assertEquals(0, d);
}
}
2.java和junit寫類與測試類/** Book類 */
public class Book {
public String name;
public String author;
private int availNum;
public Book() {
this("", "", 0);
}
public Book(String name, String author, int availNum) {
this.name = name;
this.author = author;
this.availNum = availNum;
}
public int getAvailNum() {
return availNum;
}
public void setAvailNum(int availNum) {
this.availNum = availNum;
}
public boolean subscribe() {
if (availNum > 0) {
availNum--;
return true;
}
return false;
}
public boolean cancelSubscribe() {
availNum++;
return true;
}
}
/** Book類的單元測試類 */
import junit.framework.TestCase;
public class TestBook extends TestCase {
public void testBook() {
Book book = new Book("Thinking in Java", "Bruce Eckel", 3);
assertEquals(true, book.subscribe());// 第一次預借,應該是成功的
assertEquals(2, book.getAvailNum());// 此時的可預借數是2
assertEquals(true, book.cancelSubscribe());// 取消預借,應該是成功的
assertEquals(3, book.getAvailNum());// 此時的可預借數是3
book.setAvailNum(0);// 將可預借數設為0
assertEquals(false, book.subscribe());// 此時預借,應該是不成功的
}
public static void main(String[] args) {
junit.textui.TestRunner.run(Book.class);
}
}
上面的測試類可以不要main函數,直接在集成開發環境裏用JUnit執行單元測試。
3.java junit單元測試怎麼寫package com.yuanqi.zfb.test;
import org.junit.Test;
import com.yuanqi.zfb.util.VerifyCodeUtils;
public class Atest {
@Test
public void test(){
String verifycode =VerifyCodeUtils.generateVerifyCode(8);
System.out.println(verifycode);
}
@Test
public void test2(){
// String str="2015-11-23 11:23:44";
/* boolean b= str.matches("d{4}-d{2}-d{2} d{2}:d{2}:d{2}");
if(b){
System.out.println("ok");
}else{
System.out.println("222222");
}*/
String str="2015112311:23:44";
boolean b= str.matches("d{10}:d{2}:d{2}");
System.out.println(b);
}
@Test
public void test3(){
String trTime="2014112800:05:48";
String inyear=trTime.substring(0, 4);
String inmonth=trTime.substring(4,6);
String inday=trTime.substring(6,8);
String intime=trTime.substring(8);
String time=inyear+"-"+inmonth+"-"+inday+" "+intime;
System.out.println(time);
}
}
4.如何使用junit編寫測試類首先我們需要先下載相應的 JUnit 相關的 JAR 包,下載的過程可以去 JUnit 的官方網站,也可以直接通過 Maven 資源倉庫來完成。
使用簡單的 @Test 註解實現我們的測試方法的編寫和執行 準備工作做好之後,接下來我們就可以開始嘗試編寫壹個簡單的測試代碼了。首先,我們編寫了壹個 Calculator 類,並提供五個方法分別完成加減乘除以及求平方的運算。
代碼如下: package net.oschina.bairrfhoinn.main; public class Calculator { public void add(int n){ result += n; } public void substract(int n){ result -= n; } public void multiply(int n){ result *= n; } public void divide(int n){ result /= n; } public void square(int n){ result = n * n; } public int getReuslt(){ return result; } public void clear(){ result = 0; } private static int result; } 在測試類中用到了JUnit4框架,自然要把相應地Package包含進來。最主要地一個Package就是org.junit.*。
把它包含進來之後,絕大部分功能就有了。還有一句話也非常地重要“import static org.junit.Assert.*;”,我們在測試的時候使用的壹系列assertEquals()方法就來自這個包。
大家注意壹下,這是壹個靜態包含(static),是JDK5中新增添的壹個功能。也就是説,assertEquals是Assert類中的壹系列的靜態方法,壹般的使用方式是Assert. assertEquals(),但是使用了靜態包含後,前面的類名就可以省略了,使用起來更加的方便。
另外要注意的是,我們的測試類是壹個獨立的類,沒有任何父類。測試類的名字也可以任意命名,沒有任何侷限性。
所以我們不能通過類的聲明來判斷它是不是一個測試類,它與普通類的區別在於它內部的方法的聲明,我們接着會講到。在測試類中,並不是每壹個方法都是用於測試的,所以我們必須使用“註解”來明確表明哪些是測試方法。
“註解”也是JDK5的壹個新特性,用在此處非常恰當。我們可以看到,在某些方法的前有@Before、@Test、@Ignore等字樣,這些就是註解,以壹個“@”作為開頭。
這些註解都是JUnit4自定義的,熟練掌握這些註解的含義,對於編寫恰當的測試類非常重要。 接下來我們創建壹個測試類 CalculatorTest.java,代碼如下: package net.oschina.bairrfhoinn.test; import static org.junit.Assert.*; import org.junit.Test; import net.oschina.bairrfhoinn.main.Calculator; public class CalculatorTest { private static Calculator calculator = new Calculator(); @Test public void testAdd(){ calculator.add(7); calculator.add(8); assertEquals(15, calculator.getReuslt()); } } 首先,我們要在方法的前面使用@Test標註,以表明這是壹個測試方法。
對於方法的聲明也有如下要求:名字可以隨便取,沒有任何限制,但是返回值必須為void,而且不能有任何參數。如果違反這些規定,會在運行時拋出壹個異常。
至於方法內該寫些什麼,那就要看你需要測試些什麼了。比如上述代碼中,我們想測試壹下add()方法的功能是否正確,就在測試方法中調用幾次add函數,初始值為0,先加7,再加8,我們期待的結果應該是15。
如果最終實際結果也是15,則説明add()方法是正確的,反之説明它是錯的。assertEquals(15, calculator.getResult());就是用來判斷期待結果和實際結果是否相等,其中第壹個參數填寫期待結果,第二個參數填寫實際結果,也就是通過計算得到的結果。
這樣寫好之後,JUnit 會自動進行測試並把測試結果反饋給用户。 如果想運行它,可以在 eclipse 的資源管理器中選擇該類文件,然後點擊右鍵,選擇 Run As->JUnit Test 即可看到運行結果。
使用@Test 的屬性 Ignore 指定測試時跳過這個方法 如果在寫程序前做了很好的規劃,那麼哪些方法是什麼功能都應該實現並且確定下來。因此,即使該方法尚未完成,他的具體功能也是確定的,這也就意味着你可以為他編寫測試用例。
但是,如果你已經把該方法的測試用例寫完,但該方法尚未完成,那麼測試的時候無疑是“失敗”。這種失敗和真正的失敗是有區別的,因此 JUnit 提供了壹種方法來區別他們,那就是在這種測試函數的前面加上 @Ignore 標註,這個標註的含義就是“某些方法尚未完成,暫不參與此次測試”。
這樣的話測試結果就會提示你有幾個測試被忽略,而不是失敗。壹旦你完成了相應函數,只需要把@Ignore標註刪去,就可以進行正常的測試。
比如説上面的測試類 Calculator.java 中,假設我們的 Calculator 類的 multiply() 方法沒有實現,我們可以在測試類 CalculatorTest 中先寫如下測試代碼: package net.oschina.bairrfhoinn.test; import static org.junit.Assert.*; import org.junit.Ignore; import org.junit.Test; import net.oschina.bairrfhoinn.main.Calculator; public class CalculatorTest { private static Calculator calculator = new Calculator(); 。 //此處代碼省略 @Ignore("method square() not implemented, please test this later。
") @Test public void testSquare(){ calculator.square(3); assertEquals(9, calculator.getReuslt()); } } 我們再運行壹次測試,會看到如下結果,從圖中可以很明顯的看出,方法testSquare() 上的 @Ignore 註解已經生效了,運行時直接跳過了它,而方法testAdd(。
5.Java Junit Test 要怎麼寫一般不用寫,直接測試方法,在測試的方法上加上註解@Test
import org.junit.Test;
public class TestJunit {
@Test
public void TestSaveMethod(){
Food food=new Food("紅燒肉", new BigDecimal(45.5).setScale(2, BigDecimal.ROUND_HALF_UP), "hsr.jpg");
SaveFood(food);
}
public void SaveFood(Food food){
if(food!=null){
food.setId(UUID.randomUUID().toString());
System.out.println("Food Save is OK!");
System.out.println("當前ID:"+food.getId()+" 名稱:"+food.getName()+" 單價:"+food.getPrice());
}else{
System.out.println("Food Save is False!");
}
}
}
class Food implements Serializable{
private String id;
private String name;
private BigDecimal price;
private String icon;
public Food(String name,BigDecimal price,String icon) {
this.name=name;
this.price=price;
this.icon=icon;
}
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public BigDecimal getPrice() {
return price;
}
public String getIcon() {
return icon;
}
}
//這樣的話RUN 的時候就會出現JUnit測試
6.如何使用junit編寫測試類首先我們需要先下載相應的 JUnit 相關的 JAR 包,下載的過程可以去 JUnit 的官方網站,也可以直接通過 Maven 資源倉庫來完成。
使用簡單的 @Test 註解實現我們的測試方法的編寫和執行準備工作做好之後,接下來我們就可以開始嘗試編寫壹個簡單的測試代碼了。首先,我們編寫了壹個 Calculator 類,並提供五個方法分別完成加減乘除以及求平方的運算。
代碼如下:package net.oschina.bairrfhoinn.main;public class Calculator {public void add(int n){result += n;}public void substract(int n){result -= n;}public void multiply(int n){result *= n;}public void divide(int n){result /= n;}public void square(int n){result = n * n;}public int getReuslt(){return result;}public void clear(){result = 0;}private static int result;}在測試類中用到了JUnit4框架,自然要把相應地Package包含進來。最主要地一個Package就是org.junit.*。
把它包含進來之後,絕大部分功能就有了。還有一句話也非常地重要“import static org.junit.Assert.*;”,我們在測試的時候使用的壹系列assertEquals()方法就來自這個包。
大家注意壹下,這是壹個靜態包含(static),是JDK5中新增添的壹個功能。也就是説,assertEquals是Assert類中的壹系列的靜態方法,壹般的使用方式是Assert. assertEquals(),但是使用了靜態包含後,前面的類名就可以省略了,使用起來更加的方便。
另外要注意的是,我們的測試類是壹個獨立的類,沒有任何父類。測試類的名字也可以任意命名,沒有任何侷限性。
所以我們不能通過類的聲明來判斷它是不是一個測試類,它與普通類的區別在於它內部的方法的聲明,我們接着會講到。在測試類中,並不是每壹個方法都是用於測試的,所以我們必須使用“註解”來明確表明哪些是測試方法。
“註解”也是JDK5的壹個新特性,用在此處非常恰當。我們可以看到,在某些方法的前有@Before、@Test、@Ignore等字樣,這些就是註解,以壹個“@”作為開頭。
這些註解都是JUnit4自定義的,熟練掌握這些註解的含義,對於編寫恰當的測試類非常重要。接下來我們創建壹個測試類 CalculatorTest.java,代碼如下:package net.oschina.bairrfhoinn.test;import static org.junit.Assert.*;import org.junit.Test;import net.oschina.bairrfhoinn.main.Calculator;public class CalculatorTest {private static Calculator calculator = new Calculator();@Testpublic void testAdd(){calculator.add(7);calculator.add(8);assertEquals(15, calculator.getReuslt());}}首先,我們要在方法的前面使用@Test標註,以表明這是壹個測試方法。
對於方法的聲明也有如下要求:名字可以隨便取,沒有任何限制,但是返回值必須為void,而且不能有任何參數。如果違反這些規定,會在運行時拋出壹個異常。
至於方法內該寫些什麼,那就要看你需要測試些什麼了。比如上述代碼中,我們想測試壹下add()方法的功能是否正確,就在測試方法中調用幾次add函數,初始值為0,先加7,再加8,我們期待的結果應該是15。
如果最終實際結果也是15,則説明add()方法是正確的,反之説明它是錯的。assertEquals(15, calculator.getResult());就是用來判斷期待結果和實際結果是否相等,其中第壹個參數填寫期待結果,第二個參數填寫實際結果,也就是通過計算得到的結果。
這樣寫好之後,JUnit 會自動進行測試並把測試結果反饋給用户。如果想運行它,可以在 eclipse 的資源管理器中選擇該類文件,然後點擊右鍵,選擇 Run As->JUnit Test 即可看到運行結果。
使用@Test 的屬性 Ignore 指定測試時跳過這個方法如果在寫程序前做了很好的規劃,那麼哪些方法是什麼功能都應該實現並且確定下來。因此,即使該方法尚未完成,他的具體功能也是確定的,這也就意味着你可以為他編寫測試用例。
但是,如果你已經把該方法的測試用例寫完,但該方法尚未完成,那麼測試的時候無疑是“失敗”。這種失敗和真正的失敗是有區別的,因此 JUnit 提供了壹種方法來區別他們,那就是在這種測試函數的前面加上 @Ignore 標註,這個標註的含義就是“某些方法尚未完成,暫不參與此次測試”。
這樣的話測試結果就會提示你有幾個測試被忽略,而不是失敗。壹旦你完成了相應函數,只需要把@Ignore標註刪去,就可以進行正常的測試。
比如説上面的測試類 Calculator.java 中,假設我們的 Calculator 類的 multiply() 方法沒有實現,我們可以在測試類 CalculatorTest 中先寫如下測試代碼:package net.oschina.bairrfhoinn.test;import static org.junit.Assert.*;import org.junit.Ignore;import org.junit.Test;import net.oschina.bairrfhoinn.main.Calculator;public class CalculatorTest {private static Calculator calculator = new Calculator();。 //此處代碼省略@Ignore("method square() not implemented, please test this later。
")@Testpublic void testSquare(){calculator.square(3);assertEquals(9, calculator.getReuslt());}}我們再運行壹次測試,會看到如下結果,從圖中可以很明顯的看出,方法testSquare() 上的 @Ignore 註解已經生效了,運行時直接跳過了它,而方法testAdd()仍然正常的運行並通過了測試。使用註解 @Before 和 @After 來。