Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用EasyMock覆盖org.openide.nodes.Node方法调用的函数_Java_Maven_Junit4_Easymock_Openide - Fatal编程技术网

Java 无法使用EasyMock覆盖org.openide.nodes.Node方法调用的函数

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); } } 这

我最近在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);
    }
}
这是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)