2010-03-15 36 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()); 
    } 
} 

这有效地测试同样的事情,但它会告诉你更准确地说这部分的工作,哪些不要”吨。因为在你的测试中,它只会告诉你整个测试失败,你必须找出哪一个失败。如果你这样写它,它会告诉你确切的哪个断言失败。