我得到了下面的函數獲取地圖的價值如何從一個關鍵這是一個POJO
Map<MyClass, String> someFunction() {
Map<MyClass, String> result = new HashMap<>();
return result.put(new MyClass("someString"), "someOtherString"));
}
的MyClass實現如下所示:
public class MyClass{
String string;
public MyClass(String string) {
this.string = string;
}
public void setString(String string) {
this.string = string;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((string== null) ? 0 : string.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
MyClass other = (MyClass) obj;
if (string== null) {
if (other.string!= null) {
return false;
}
} else if (!string.equals(other.string)) {
return false;
}
return true;
}
}
在我的測試我我正在做以下操作:
@Test
public void test() {
Map<MyClass, String> outcome = classUnderTest.someFunction();
assertThat(outcome.get(new MyClass("someString")), is("someOtherString"));
}
但是,此測試失敗,因爲實際爲空。 如果我嘗試以下方法:
assertThat(outcome.keySet(), hasItem(MY_CLASS));
這也失敗了,告訴我,這些是不同的intantiations。我甚至試圖調試我的測試,但它永遠不會達到equals方法。你能告訴我這裏發生了什麼嗎?
你使用的是什麼版本的junit? – Eben 2014-09-24 10:48:39
目前我使用的版本是4.11 – Chris311 2014-09-24 13:55:31