Java setter方法的JUnit测试

Java setter方法的JUnit测试,java,Java,我知道它不正确,但我不知道如何修复它。作为一个整体,我对Java和编码是相当陌生的。有人能帮我吗 我不明白这个问题。你能把错误贴出来吗 在第一个类中,替换为*的在注释块之外,您必须将/放在该句之前 单元测试不是测试您的房间类,您必须执行以下操作: @Test public void setDescription(java.lang.String s) { String input = "abc\n"; String expected = "abc";

我知道它不正确,但我不知道如何修复它。作为一个整体,我对Java和编码是相当陌生的。有人能帮我吗

我不明白这个问题。你能把错误贴出来吗

在第一个类中,替换为*的
在注释块之外,您必须将
/
放在该句之前

单元测试不是测试您的
房间
类,您必须执行以下操作:

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

假设您已经为测试类创建了一个房间实例

@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());
}
您可以根据自己的期望添加更多这样的断言。setDescription如何处理空字符串或空输入;所有这些用例都可以在UT中断言

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

以下是您的测试:

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

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

您如何在测试中构建
房间
对象?为什么您希望
当对象是
“abc*”
?单元测试验证单元的公共可观察行为,即:返回值和与依赖项的通信。setter方法只会改变我们无法验证的对象的内部状态。@TimothyTruckle我想说它是公开可见的,因为我们有一个getter@user7getter不重要-它不应该被测试。在这里,您可能会出于不同的原因对其进行测试——它不仅仅是setter,它内部还有一个逻辑。我尝试了你的帮助,结果是:(对不起,伙计,我想在我离开(java.lang.String s)的testDescription()之后,它工作了。我想我必须把它放进去,就像在我的方法中我有它一样?只需要检查expected=“abc*”我认为您混淆了JUnit测试目标。您必须测试您的Room类。您必须设置描述,并且必须测试getDescription()是否获得预期结果。测试中不需要set和get…测试方法不需要参数,因为您正在测试中定义输入和预期字符串。“public void testDescription()”应该足够了(感谢Amir的英文更正)我也尝试过你的帮助,但它也不喜欢:(它很有魅力,谢谢Aleks,但是你知道为什么我在放置testSetDescription(java.lang.String s)时这样做是不起作用的吗?它起作用了。但是在你的代码中,你期望“abc\n”而不是“abc*”,就像在你的代码中:
s.replace(“\n”,“*”)如果你想写测试,你必须问自己几个问题:1-我需要测试什么?2-我需要向方法传递什么参数?3-我期望的结果是什么。
...
Room room = new Room("test room");
...
@Test
public void testSetDescription() {
    assertEquals("abc", room.setDescription("abc"));
    assertEquals("abc*", room.setDescription("abc\n"));
}
@Test
  public void testSetDescription() {
    Room instance = new Room("test");
    instance.setDescription("abc\n");
    assertEquals("abc*", instance.getDescription());
  }