Java 无法使用EasyMock覆盖org.openide.nodes.Node方法调用的函数
我最近在EasyMock上遇到了一个奇怪的问题。 这是我正在测试的课程Java 无法使用EasyMock覆盖org.openide.nodes.Node方法调用的函数,java,maven,junit4,easymock,openide,Java,Maven,Junit4,Easymock,Openide,我最近在EasyMock上遇到了一个奇怪的问题。 这是我正在测试的课程 package com.test.junits; import org.openide.nodes.Node; public class IsRoot { public boolean isRoot(Node node) { Node parentNode = node.getParentNode(); return (parentNode == null); } } 这
package com.test.junits;
import org.openide.nodes.Node;
public class IsRoot {
public boolean isRoot(Node node) {
Node parentNode = node.getParentNode();
return (parentNode == null);
}
}
这是Junit类
package com.test.junits
import static org.junit.Assert.assertNotNull;
import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.Test;
import org.openide.nodes.Node;
public class IsRootTest {
private IsRoot isroot;
private Node node;
@Before
public void setUp() {
isroot = new IsRoot();
node = EasyMock.createMock(Node.class);
}
@Test
public void gettingExpectationsForGetParentFromNode() {
Node node = EasyMock.createMock(Node.class);
Node parentNode = EasyMock.createMock(Node.class);
EasyMock.expect(node.getParentNode()).andReturn(parentNode);
EasyMock.replay(node);
isroot.isRoot(node);
EasyMock.verify(node);
}
当我尝试运行它时,我得到以下异常(使用maven和eclipse)
我是不是遗漏了什么?
任何帮助都将不胜感激。这可能与您有一个名为node
的本地字段和一个名为node
的类变量有关,这两个变量都是node
类,都是mock
我将完全删除测试本地节点
,如果您确实需要测试本地模拟节点
编辑
我之前的回答是错误的,应该是一个评论。
隐藏的物体没有引起任何问题。(尽管我仍然认为它们应该被删除/重命名)
这里的实际问题是,您试图模拟的方法是final
,因此无法模拟
当EasyMock模拟方法/类时,它通过扩展和重写它们来实现。因此,不能用EasyMock模拟最终类和最终方法,因为它们不能被重写
对
getParentNode()
方法的调用未被模拟,因此在预期调用的记录状态期间未注册。我尝试了相同的代码。这不是名称或变量的问题。Easymock无法验证。@RaghunandanKrishnamurthy你没有错。我发现被嘲笑的方法是最终的,并改变了我的答案。话虽如此,即使在测试中,现场隐藏也不是一个好计划。
java.lang.IllegalStateException: no last call on a mock available
at org.easymock.EasyMock.getControlForLastCall(EasyMock.java:521)
at org.easymock.EasyMock.expect(EasyMock.java:499)
at com.test.junits.IsRootTest.gettingExpectationsForGetParentFromNode(IsRootTest.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:71)
at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)