Java Junit在期望值和实际值相同时会失败吗?

时间:2019-09-20 08:37:30

标签: 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 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

替换:

  

assertEquals(“用户:Charlie Ansell已成功添加”,outContent.toString());

具有:

  

assertEquals(“ \ n用户:Charlie Ansell已成功添加\ n”,outContent.toString());

答案 2 :(得分:0)

好的,所以我才找到答案。

我在预期对象和实际对象的末尾添加了$ ping repo1.maven.org 函数。所以我的新代码如下:

.trim()

基于此,我的假设是两个输出中都有空格,感谢所有评论者,我感谢您的帮助