2012-10-01 147 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()方法,從而使得返回的字符串與測試期望的字符串(略)不同。