2010-03-15 41 views
0

我有這樣的JUnit測試,我需要幫助發展中國家的接口和類,這裏是考驗:需要幫助的發展中國家一類爲我的JUnit測試

Box b1 = new DefaultBox("abc"); Box b2 = new DefaultBox("def"); 
Box b3 = new DefaultBox(""); 

assertEquals("abc", b1.contents()); 
assertEquals("[abc]", b1.toString()); 
assertTrue(b1.equals(b1)); assertFalse(b1.equals(b2)); 
assertFalse(b1.equals(null)); 
assertEquals("cba", b1.flip().contents()); 
assertEquals("", b3.flip().contents()); 

誰能幫助我在開發一個默認盒類和一個盒子界面,使這些測試通過?非常感激任何的幫助。 「隱式超級構造盒()是未定義必須顯式調用另一個構造」

更新

好吧,我想開始一個constuctor但我不斷收到一個運行時錯誤說這裏是我的類:

import javax.swing.Box; 
public class DefaultBox extends Box{ 
     public DefaultBox(String string) { 

    } 
} 

我的JUnit測試是:

import static org.junit.Assert.*; 
import javax.swing.Box; 



public class question3_test { 

    Box b1 = new DefaultBox("abc"); 
    Box b2 = new DefaultBox("def"); 
    Box b3 = new DefaultBox(""); 

    public void testquestion3(){ 
    assertEquals("abc", b1.contents()); 
    assertEquals("[abc]", b1.toString()); 
    assertTrue(b1.equals(b1)); assertFalse(b1.equals(b2)); 
    assertFalse(b1.equals(null)); 
    assertEquals("cba", b1.flip().contents()); 
    assertEquals("", b3.flip().contents()); 
    } 

} 

我試圖刪除 「擴展箱」,但那時,在Junit測試中給我一個運行時錯誤。任何人都可以指導我如何去除這個隱含的超級構造函數錯誤?

回答

0

你需要什麼樣的幫助?你的問題似乎並不複雜。

  • contents應該返回字符串包含
  • toString應該把它放在括號
  • equals應檢查內容相等
  • flip應該顛倒內容

我返回一個新的DefaultBox假設這是家庭作業,但是你必須實現它的類很瑣碎。

+0

這是家庭作業,我基本上需要幫助如何構建這個類。我正在努力如何使用TDD構建實際的類,任何幫助將不勝感激 – Alpdog14 2010-03-15 15:12:03

0

隱式超級構造函數Box()未定義。必須顯式調用另一個構造函數「,這是因爲DefaultBox調用了一個與Box不兼容的構造函數,在這種情況下,DefaultBox具有一個String構造函數,因爲它是空的,JVM將嘗試創建一個帶有無參數構造函數的Box,找到。嘗試,

import javax.swing.Box; 
public class DefaultBox extends Box{ 
     public DefaultBox(String string) { 
      //call some version of the Box constructor that is suitable. Javax swing has only a int arg constructor so super(5); perhaps? 
     } 
} 

相當爲什麼你會對搖擺盒一門功課是令人費解的,雖然我:)

+0

實際上eclipse希望我把它放在javax.swing.Box中,沒有它我的Junit測試varibales以紅色突出顯示 – Alpdog14 2010-03-15 21:20:34

+0

我的猜測是你的任務需要你自己創建一個接口/抽象類Box,並且編寫一個實現/擴展Box的DefaultBox。 – 2010-03-15 22:23:11

+0

alpdog14:您的測試變量被SUPPOSED以紅色突出顯示。這是測試驅動的開發。當然,Eclipse無法找到這個類;你還沒有寫出來。刪除導入,你不想使用javax.swing.Box,老師希望你寫一個接口Box。 – Ricket 2010-03-16 01:55:04

1

這裏是一個可能的骨架。我選擇不提供完整的實現,因爲這是一門功課問題

interface Box { 
    //put content and flip methods 
} 

public class DefaultBox implements Box { 
    public DefaultBox(String str) { 
     //Find out how to store this str as an internal field variable? 
    } 
} 
+0

我很感謝大家的幫助,但我對Eclipse有一個側面的問題。我創建了我的類和JUnit測試,但JUnit測試文件不讓我將其作爲測試運行,它只是說運行配置。我之前使用過這個,並且能夠選擇Run As JUnit測試。有誰知道如何激活這個選項。 – Alpdog14 2010-03-15 23:45:58

+0

alpdog14:打開JUnit文件,只需單擊工具欄中的綠色播放按鈕即可。它應該將其識別爲JUnit測試並啓動正確的配置,如果您願意,可以使用「運行方式」菜單。 – Ricket 2010-03-16 01:56:00

0

我很肯定你不需要想使用javax.swing.Box,而是一個自定義界面,你可以將自己的任務與自己的任務結合在一起,或者自己寫。因此請刪除導入javax.swing.Box或將其替換爲正確的導入。

另外,我想提出一個不同的方式來寫你的JUnit測試:

import static org.junit.Assert.*; 

public class DefaultBoxTest { 

    Box b1 = new DefaultBox("abc"); 
    Box b2 = new DefaultBox("def"); 
    Box b3 = new DefaultBox(""); 

    public void testContents(){ 
     assertEquals("abc", b1.contents()); 
    } 

    public void testToString(){ 
     assertEquals("[abc]", b1.toString()); 
    } 

    public void testEqualsItSelf(){ 
     assertTrue(b1.equals(b1)); 
    } 

    public void testNotEqualsOther(){ 
     assertFalse(b1.equals(b2)); 
    } 

    public void testNotEqualsNull(){ 
     assertFalse(b1.equals(null)); 
    } 

    public void testFlip(){ 
     assertEquals("cba", b1.flip().contents()); 
    } 

    public void testFlipEmpty(){ 
     assertEquals("", b3.flip().contents()); 
    } 
} 

這有效地測試同樣的事情,但它會告訴你更準確地說這部分的工作,哪些不要」噸。因爲在你的測試中,它只會告訴你整個測試失敗,你必須找出哪一個失敗。如果你這樣寫它,它會告訴你確切的哪個斷言失敗。