Java 未指定jMock期望值

Java 未指定jMock期望值,java,mocking,jmock,Java,Mocking,Jmock,我是jMock的新手,所以我正在一个简单的例子中尝试。但我不明白为什么它不起作用。下面是我正在测试的类: package com.application; import com.domain.Coordinate; import com.domain.Playable; public class ChessFacade { private final Playable board; public ChessFacade(Playable aBoard) {

我是jMock的新手,所以我正在一个简单的例子中尝试。但我不明白为什么它不起作用。下面是我正在测试的类:

package com.application;

import com.domain.Coordinate;
import com.domain.Playable;

public class ChessFacade {

    private final Playable board;

    public ChessFacade(Playable aBoard) {
        board = aBoard;
    }

    public void showPotentialMoves(Coordinate aCoordinate) {
        board.getTileOccupancy(aCoordinate);
    }

}
下面是我的模拟对象测试:

package unit.application;

import application.ChessFacade;
import com.domain.Coordinate;
import com.domain.Playable;
import junit.framework.TestCase;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.integration.junit4.JMock;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.junit.runner.RunWith;

@RunWith(JMock.class)
public class ChessFacadeTest extends TestCase {

    public void testFacadeGetsPotentialMovesFromBoard() {
        Mockery context = new JUnit4Mockery();
        final Playable mockBoard = context.mock(Playable.class);
        ChessFacade facade = new ChessFacade(mockBoard);

        final Coordinate locationToShow = new Coordinate(0, 0);
        facade.showPotentialMoves(locationToShow);

        context.checking(new Expectations() {{
            oneOf(mockBoard).getTileOccupancy(locationToShow);
        }});

        context.assertIsSatisfied();
    }

}
我收到的错误是:

Testcase: testFacadeGetsPotentialMovesFromBoard(unit.application.ChessFacadeTest):        Caused an ERROR
unexpected invocation: playable.getTileOccupancy(<Coordinate{row=0column=0}>)
no expectations specified: did you...
 - forget to start an expectation with a cardinality clause?
 - call a mocked method to specify the parameter of an expectation?
what happened before this: nothing!
java.lang.AssertionError: unexpected invocation: playable.getTileOccupancy(<Coordinate{row=0column=0}>)
no expectations specified: did you...
 - forget to start an expectation with a cardinality clause?
 - call a mocked method to specify the parameter of an expectation?
what happened before this: nothing!
        at org.jmock.internal.InvocationDispatcher.dispatch(InvocationDispatcher.java:56)
        at org.jmock.internal.InvocationDispatcher.dispatch(InvocationDispatcher.java:56)
        at org.jmock.Mockery.dispatch(Mockery.java:218)
        at org.jmock.Mockery.access$000(Mockery.java:43)
        at org.jmock.Mockery$MockObject.invoke(Mockery.java:258)
        at org.jmock.internal.InvocationDiverter.invoke(InvocationDiverter.java:27)
        at org.jmock.internal.FakeObjectMethods.invoke(FakeObjectMethods.java:38)
        at org.jmock.lib.JavaReflectionImposteriser$1.invoke(JavaReflectionImposteriser.java:33)
        at $Proxy0.getTileOccupancy(Unknown Source)
        at application.ChessFacade.showPotentialMoves(ChessFacade.java:15)
        at unit.application.ChessFacadeTest.testFacadeGetsPotentialMovesFromBoard(ChessFacadeTest.java:22)
Testcase:testFacadeGetsPotentialMovesFromBoard(unit.application.ChessFacadeTest):导致错误
意外调用:playable.getTileOccupation()
未指定期望值:您是否。。。
-忘记用基数子句开始期望?
-调用模拟方法以指定期望的参数?
在此之前发生了什么:什么都没有!
java.lang.AssertionError:意外调用:playable.getTileOccupation()
未指定期望值:您是否。。。
-忘记用基数子句开始期望?
-调用模拟方法以指定期望的参数?
在此之前发生了什么:什么都没有!
位于org.jmock.internal.InvocationDispatcher.dispatch(InvocationDispatcher.java:56)
位于org.jmock.internal.InvocationDispatcher.dispatch(InvocationDispatcher.java:56)
位于org.jmock.mockry.dispatch(mockry.java:218)
访问org.jmock.mockry.access$000(mockry.java:43)
位于org.jmock.mockry$MockObject.invoke(mockry.java:258)
位于org.jmock.internal.InvocationDiverter.invoke(InvocationDiverter.java:27)
位于org.jmock.internal.FakeObjectMethods.invoke(FakeObjectMethods.java:38)
位于org.jmock.lib.JavaReflectionImposteriser$1.invoke(JavaReflectionImposteriser.java:33)
在$Proxy0.GetTileOccupation(未知来源)
在application.ChessFacade.showPotentialMoves(ChessFacade.java:15)
位于unit.application.ChessFacadeTest.testFacadeGetsPotentialMovesFromBoard(ChessFacadeTest.java:22)

您可能必须在调用facade方法之前而不是之后定义期望值。

此外,您似乎混合了JUnit3和JUnit4。我建议你只选一个。@RunWith(JMock.class)用于4,否则您需要使用JMock的JUnit 3集成附带的TestCase类。

您可能必须在调用facade方法之前定义期望值,而不是在调用facade方法之后。@rsp-回答这个问题,因为这就是答案。你必须在打电话之前设定期望值。是的,就是这样。回答这个问题,这样我就可以接受了。:)谢谢我也不知道。