2012-10-01 150 views
2

我有这样的Java程序,但我的测试给了我这个消息:Java测试失败(的toString)

testEmployeeTostring:失败testEmployeeTostring预计< [ID [= 1013名=犹八早,工作=]采购]>却被:< [ID [= 1013, 名=犹八早,工作=]采购]>

我不得不使用@Override,我认为这就是问题所在。我希望有人能弄清楚这个问题:

public class Employee { 

     int id; 
     String name; 
     JobType job; 

     public Employee(int id, String name, JobType job) 
     { 
       this.id = id; 
       this.name = name; 
       this.job = job; 
     } 

     @Override public String toString() 
     { 
       return ("["+ "id =" + id + ", name = " + name + ", job = " + job + "]"); 
     } 
} 
+0

重写equals()方法吗? – midhunhk

+0

感谢大家的贡献。我没有密切关注间距。我不知道测试认为这是一件大事。我想到了。 –

回答

1

您确定您有equals()方法重写吗? JUnit使用equals()来比较对象。重载hashCode()始终是一个好主意,以及:

@Override 
public boolean equals(Object o) { 
    if (this == o) return true; 
    if (!(o instanceof Employee)) return false; 
    Employee employee = (Employee) o; 
    return id == employee.id && job == employee.job && name.equals(employee.name); 

} 

@Override 
public int hashCode() { 
    int result = id; 
    result = 31 * result + name.hashCode(); 
    result = 31 * result + job.hashCode(); 
    return result; 
} 

上面的代码假定所有字段都是非空的,并且JobTypeenum。并且BTW toString()在这里可能没有什么可做的,只要你比较对象,而不是对象的toString()(坏习惯)。

+0

downvote的原因是什么? –

+0

这是我最初的猜测,但似乎这个问题是不同的......在任何情况下都不值得一提的是... – assylias

8

有和“采购”

工作=]采购

2

。在你预计的额外空间之间的空间]带有断言语句的字符串。

-1

随着String aString b

你在做的,而不是a == ba.equals(b)

1

这可能是由于JobType.toString()方法返回一个额外的空间。

1

我相信你在字符串中有一些额外的空间返回toString()方法,从而使得返回的字符串与测试期望的字符串(略)不同。