JUnit测试setter方法

时间:2018-03-28 11:29:49

标签: java

    public class Room extends java.lang.Object implements java.io.Serializable {

            public String description;
            public Map<String, Room> map;
            public List<Thing> things;

            //Room
            //Parameters:
            //desc - Description for the room Note: any newlines in desc will be 
            replaced with *

            public Room(java.lang.String desc){
                this.description = desc;
            }
            //getDescription
            //A description of the room
            //Returns:
            //Description

            public java.lang.String getDescription(){
                return description;
            }
            //replaceLine
            //any new line in s will be replaced with *

            public String replaceLine(String s){
                return s.replace("\n", "*");
            }

            //setDescription
            //Change Room description Note: any newlines in s will be 
            //replaced with *
            //Parameters:
            //s - new Description

            public void setDescription(java.lang.String s){
                    this.description = replaceLine(s);
            }
}

我正在尝试为最后一个方法编写一个Junit测试:

@Test
    public void setDescription(java.lang.String s) {
        String input = "abc\n";
        String expected = "abc";
        setDescription(input);
        assertEquals(expected, input);
    }

我知道这不正确,但我不知道如何解决它。我对Java和整个编码都很陌生。有人可以帮我这个吗?

3 个答案:

答案 0 :(得分:1)

让我们假设您已为测试类创建了一个Room实例。

...
Room room = new Room("test room");
...
@Test
public void testSetDescription() {
    assertEquals("abc", room.setDescription("abc"));
    assertEquals("abc*", room.setDescription("abc\n"));
}

您可以根据自己的期望添加更多此类断言。 setDescription如何处理空字符串或空输入;所有这些用例都可以在您的UT中声明。

顺便说一下,你不必显式扩展Object。每个类都直接或间接地通过继承隐式地从Object扩展。您也不必使用java.lang包中任何内容的完全限定名称。它们是隐式导入的。此外,如果replaceLine应该是公共API的一部分,您可能需要为其添加类似的单元测试用例,例如public void testReplaceLine() {...}。欢迎来到Java编程!

答案 1 :(得分:1)

这是你的测试:

@Test
  public void testSetDescription() {
    Room instance = new Room("test");
    instance.setDescription("abc\n");
    assertEquals("abc*", instance.getDescription());
  }

assertEquals方法已开发,可以多种方式使用。在这种情况下,我们首先将期望值设置在第二位,即对象的实际数据(实际数据)。但在现实生活中,最有用的测试是只检查单个方法的测试,但在您的情况下,您需要一个方法,但实际上测试其他方法。在实际项目中,你不应该测试getter和setter。只有业务逻辑,因为如果您测试每种方法,您将有更多时间使用主代码。

答案 2 :(得分:-1)

我没有遇到问题。你可以发布错误吗?

在第一堂课中,replaced with *位于评论栏之外,您必须将//放在该句子之前

单元测试没有测试你的Room课程,你必须做这样的事情:

@Test
public void testDescription(java.lang.String s) {
    String input = "abc\n";
    String expected = "abc";

    //create your Room instance 
    Room myRoom = new Room(input);//why using a constructor with description if you set the description after?
    //set the description in your Room instance
    myRoom.setDescription(input);

    //test your set-get Description against your expected result
    assertEquals(expected, myRoom.getDescription());
}