繁体   English   中英

测试时 JUnit 不调用对象等于

[英]JUnit not calling object equals when testing

JUnit 抛出此错误:

java.lang.AssertionError: expected:<com.mycompany.models.EntityStringProperty@1e81f4dc> but was:<com.mycompany.models.EntityStringProperty@4d591d15>
    at org.junit.Assert.fail(Assert.java:88)
    at org.junit.Assert.failNotEquals(Assert.java:834)
    at org.junit.Assert.assertEquals(Assert.java:118)
    at org.junit.Assert.assertEquals(Assert.java:144)
    at com.mycompany.models.EntityPropertyTest.testStringEntity(EntityPropertyTest.java:15)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)

对于这个测试:

  @Test
  public void testStringEntity() {
    EntityProperty stringProperty = new EntityStringProperty("hello world");
    EntityProperty stringPropertyCompare = new EntityStringProperty("hello world");
    assertEquals(stringProperty, stringPropertyCompare);
  }

甚至equals也被覆盖了:

public class EntityStringProperty extends PrimitiveEntityProperty { 
  /* NOTE: PrimitiveEntityProperty implements EntityProperty */
  public EntityStringProperty(String stringValue) {
    super(stringValue, String.class);
  }

  @Override public boolean equals(Object obj) {
    if (EntityStringProperty.class.isAssignableFrom(obj.getClass())) {
      EntityStringProperty property = (EntityStringProperty) obj;
      if (getStringValue().equals(property.getStringValue()) && getValueType().isAssignableFrom(
          property.getClass())) {
        return true;
      }
    }
    return false;
  }
}

这里可能有什么问题? 如何正确地对两个对象的相等进行此测试?

以下是解决此问题的方法,将equals的实现更改为:

  @Override public boolean equals(Object obj) {
    if (EntityStringProperty.class.isAssignableFrom(obj.getClass())) {
      EntityStringProperty property = (EntityStringProperty) obj;
      if (getStringValue().equals(property.getStringValue()) && getValueType().isAssignableFrom(
          property.getValueType())) {
        return true;
      }
    }
    return false;
  }

注意变化,

getValueType().isAssignableFrom(property.getValueType())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM