需要帮助为我的JUnit测试开发一个类

时间:2010-03-15 04:04:01

标签: java 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()); 

任何人都可以帮我开发默认的盒子类和盒子界面来让这些测试通过吗?任何帮助都将非常感激。

更新

好的我正在尝试启动一个构造函数,但我一直遇到运行时错误,说“隐式超级构造函数Box()未定义。必须显式调用另一个构造函数”这是我的类:

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测试中给出运行时错误。任何人都可以指导我如何删除这个隐式的超级构造函数错误?

4 个答案:

答案 0 :(得分: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?
    }
}

答案 1 :(得分:0)

您需要什么样的帮助?你的问题似乎并不那么复杂。

  • contents应该返回包含的字符串
  • toString应将其放在括号中
  • equals应检查内容是否相等
  • flip应返回内容相反的新DefaultBox

我认为这是家庭作业,但你必须要实现它的课程是非常微不足道的。

答案 2 :(得分:0)

隐式超级构造函数Box()未定义。必须显式地调用另一个构造函数“。这是因为DefaultBox调用了一个与Box不兼容的构造函数。在这种情况下,DefaultBox有一个String构造函数,因为它是空的,JVM将尝试创建一个没有arg构造函数的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?
       }
}

你为什么要在Swing Box上做家庭作业令我感到困惑:)

答案 3 :(得分: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()); 
     }
}

这有效地测试了同样的东西,但它会更准确地告诉你哪些部分有效,哪些部分无效。因为通过测试,它只会告诉您整个测试失败,您将不得不找出哪一个失败。如果你这样写它会告诉你完全哪个断言失败。