我正在将我的应用程序从JDK 7迁移到JDK 8.在执行操作时,如果创建了如下所示的com.sun.jdi.InvocationException occurred invoking method
实例,我将面临异常TestField
。我在调试时遇到异常,无法找到原因。我怀疑发生 NullPointerException , InvocationException 会掩盖它。我在TestField
中覆盖了以下Object方法。
实用程序类下面是commons-lang
jar。
HashCodeBuilder
EqualsBuilder
ToStringBuilder
public class TestField {
private String name;
private Rules rules;
public TestField(String name, Rules rules)
{ this.name = name;
this.rules = rules;
}
public String toString() {
return new ToStringBuilder(this)
.append("\n name", this.getName())
.append("\n Rules", this.getRules())
.append("\n ")
.toString();
}
public boolean equals(Object other) {
if ( !(other instanceof TestField) ) return false;
TestField castOther = (TestField) other;
return new EqualsBuilder()
.append(this.getName(), castOther.getName())
.append(this.getRules(), castOther.getRules())
.isEquals();
}
public int hashCode() {
return new HashCodeBuilder()
.append(this.getName())
.append(this.getRules())
.toHashCode();
}
}
有人遇到过这样的问题。有谁可以帮我解决同样的问题。感谢。
答案 0 :(得分:2)
虽然我没有遇到过这个特定的问题,但我已经公平地分享了一些迁移问题,这些问题是由后来的进程掩盖的一些变化引起的。
我打算建议回溯并查看你的toString方法,但似乎有几个人已经遇到了同样的问题; toString或你的toHashCode是最有可能的罪魁祸首。在坚果shell中,空指针异常很可能被抛出但被com.sun.jdi.InvocationException错误掩盖。因此,如果你得到一个空指针异常,那么在此之前仍然会发生一些事情但是被屏蔽了。只需取出部分代码,然后逐步进行处理。
以下是我认为可以解决此问题的其他问题和答案(我没有将其标记为重复的声誉):
com-sun-jdi-invocationexception occurred invoking method
另外看一下这个问题,特别是Robin Green的评论,您是否尝试过以这种方式调试此代码?
答案 1 :(得分:0)
您可能要检查类的hashcode()。如果无论如何它都会陷入nullPointer异常中,则Mockito将无法调用该方法。 例如,如果hashCode()已使用在类的构造函数中传递的参数实现,则其中的任何一个为null。