2014-02-20 39 views
0

好的,所以我第一次使用JUnit。我在ListOfFraction類中有兩個公共函數:add和delete。它們在ListOfFractionTest類中列出,我將對此列表進行測試(這是一個可擴展的大小爲2的列表)。這就是爲什麼我使用三個分數進行測試的原因。添加測試我非常積極。但是,我的刪除方法實際上甚至測試什麼?我想一些問題是JUnit會在我的場景中做些什麼來幫助我,並且是否設置了合理的測試?請和感謝所有和任何建議。注::我只有大約2個月的Java知識。如何測試J-Unit中的testDelete(),如何實際測試J-Unit

/** 
    * Test of add method, of class ListOfFraction. 
    */ 
    @Test 
    public void testAdd() 
    { 
     System.out.println("add"); 
     Fraction z = new Fraction(1, 2); 
     Fraction x = new Fraction(2, 3); 
     Fraction y = new Fraction("4/3"); 
     ListOfFraction instance = new ListOfFraction(); 
     instance.add(z); 
     instance.add(x); 
     instance.add(y); 
     // review the generated test code and remove the default call to fail. 
     boolean expResult = true;   // we expect the result of delete to 
              // be true since we just added it. 
     boolean result = instance.delete(z);// Call actual delete 
     boolean result2 = instance.delete(x); 
     boolean result3 = instance.delete(y); 
     assertEquals(expResult, result); // Test the results. 
     assertEquals(expResult, result2); 
     assertEquals(expResult, result3); 
    } 

    /** 
    * Test of delete method, of class ListOfFraction. 
    */ 
    @Test 
    public void testDelete() 
    { 
     System.out.println("delete"); 
     Fraction z = new Fraction(3, 2); 
     Fraction x = new Fraction(3, 3); 
     Fraction y = new Fraction("7/3"); 
     ListOfFraction instance = new ListOfFraction(); 
     boolean expResult = false; 
     boolean result = instance.delete(z); 
     boolean result2 = instance.delete(x); 
     boolean result3 = instance.delete(y); 
     assertEquals(expResult, result); 
     assertEquals(expResult, result2); 
     assertEquals(expResult, result3); 
     // TODO review the generated test code and remove the default 
     // call to fail. 
    } 
} 

回答

1

您的測試混亂:您的添加文本也在刪除,然後測試它不存在,但是如果添加和刪除都被破壞(即什麼都不做),您的測試仍然會通過!

更好添加,然後確認它已被添加。在刪除時,可以同時執行這兩個操作,因爲您正在單獨測試添加部分。

另外,不要使用那樣的變量。變化:

boolean expResult = true; 
boolean result = instance.delete(z); 
assertEquals(expResult, result); 

要簡單地說:

assertTrue(instance.delete(z)); 

更少的代碼,更易於閱讀,容易調試。

+0

這是用於添加方法還是刪除方法? –

+0

@That_Programmguy「this」是什麼意思?這裏有幾點。哪一個? – Bohemian

+0

像任何情況下,你發現布爾,布爾,assertEquals ....應改爲簡單assertTrue(實例....)?另外我還有一個我想發佈的測試產品,你介意看看它嗎?我對這個JUnit真的很陌生,它似乎是我想要處理的事情。 –

1

您的刪除測試試圖刪除您從未添加到ListOfFractions的條目。看到您的添加測試,看起來正確添加項目,然後刪除它們。這並不壞,它可以被認爲是一個測試 - 刪除那裏的項目。但是您可能還需要測試添加3個條目然後刪除它們的情況。

使用JUnit4,創建一個具有一些通用代碼的基類很容易,您的測試類可以從中擴展。或者,你可以在這個測試類中創建一些'helper'方法,像createBaseListOfFractions()這樣的方法,它可以建立在add和delete方法中使用的3個分數的列表。通過這種方式,您可以重新使用代碼,並且實際的測試方法變得更小,調用幫助器方法,然後運用特定的方法,最終確定您的條件。