有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java Junit在预期和实际情况相同时失败?

我已经完成了一个我一直在做的大项目。我通常在没有Junit的情况下进行自己的测试,但我的要求是现在就使用它。我想测试的所有方法都是无效的,不会返回任何内容,而是根据某些因素打印信息。因此,我需要使用Junit的assertEquals方法来测试这些

例如:

public void addContact(String firstName,String lastName,Person p) {
       String key = firstName.substring(0,1).toUpperCase() + firstName.substring(1).toLowerCase() + " ".concat(lastName.substring(0,1).toUpperCase() + lastName.substring(1).toLowerCase());
    if(hasContact(key)){
        System.out.println("\nCannot add user. User already exists. Try adding distinct name to diffentiate between users with the same name");
    }
    else{
       this.contacts.put(key,p);
       System.out.println("\nUser: " + key + " Successfully added");
    }
    }

这是我想从AddressBook类中测试的void方法之一,现在,我正在测试是否可以添加用户,以便它可以打印它所做的\nUser: " + key + " Successfully added

在我的JUNIT测试类中,我正试着这样检查它

@Test
    public void addContact(){
         final ByteArrayOutputStream outContent = new ByteArrayOutputStream();



         Address a1 = new Address("grove","Waterford","Waterford","x9123r","0987654321");
        Person p1 = new Person("Charlie","Ansell",a1);
        System.setOut(new PrintStream(outContent));
        ad1.addContact("Charlie","Ansell", p1);
        assertEquals("User: Charlie Ansell Successfully added", outContent.toString());


    }

Junit的输出是:expected:<[User: Charlie Ansell Successfully added]> but was <[User: Charlie Ansell Successfully added]>

我的问题是,如果它们显示相同的输出,为什么会失败


共 (3) 个答案

  1. # 1 楼答案

    尽管内容看起来很相似,但在程序中有额外的换行符(\n),这些换行符并没有包含在测试中

    替换:

    assertEquals("User: Charlie Ansell Successfully added", outContent.toString());

    与:

    assertEquals("\nUser: Charlie Ansell Successfully added\n", outContent.toString());

  2. # 2 楼答案

    您是否尝试过调试它并查看其差异
    我的猜测-在开头(从代码中)和结尾(正在使用println)都缺少\n

    这应该起作用: assertEquals(“\n用户:Charlie Ansell已成功添加\n”,outContent.toString())

  3. # 3 楼答案

    好的,我刚刚找到了答案

    我在预期对象和实际对象的末尾添加了.trim()函数。因此,我的新代码如下所示:

    @Test
    public void addContact(){
         final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
    
    
    
         Address a1 = new Address("grove","Waterford","Waterford","x9123r","0987654321");
        Person p1 = new Person("Charlie","Ansell",a1);
        System.setOut(new PrintStream(outContent));
        ad1.addContact("Charlie","Ansell", p1);
        assertEquals("\nUser: Charlie Ansell Successfully added\n".trim(), outContent.toString().trim());
    
    
    }
    

    我的假设是,这两个输出中都有空白,感谢所有评论,我感谢您的帮助