【问题标题】:EasyMock unexpected method callEasyMock 意外方法调用
【发布时间】:2017-03-06 04:04:42
【问题描述】:

我不知道如何设置调用模拟类的期望。这是 JUnit 测试:

public class AfkTest extends TestCase {
private AfkPlayerManager manager;
private Player player;
private Set<AfkPlayer> afkPlayers;


public void setUp() throws Exception {
    super.setUp();

    manager = new AfkPlayerManager();
    player = EasyMock.createMock(Player.class);
    afkPlayers = new HashSet<AfkPlayer>();
}

public void tearDown() {
}

public void testNotifyOfAfkPlayerSuccess() {
    AfkPlayer afkPlayer = new AfkPlayer();
    afkPlayer.setPlayer(player);
    afkPlayer.setReason("TEST REASON");
    afkPlayers.add(afkPlayer);

    List<Player> onlinePlayers = new ArrayList<Player>();
    onlinePlayers.add(player);
    onlinePlayers.add(player);

    EasyMock.expect(player.getDisplayName()).andReturn("TEST PLAYER");

    player.sendMessage("§9TEST PLAYER§b is AFK. [TEST REASON]");
    EasyMock.expectLastCall().times(1);

    //activate the mock
    EasyMock.replay(player);    

    assertTrue(manager.notifyOfAfkPlayer(onlinePlayers, afkPlayer));

    //verify call to sendMessage is made or not
    EasyMock.verify(player);
}

}

以及我正在测试的方法:

   public class AfkPlayerManager implements Manager {

    public boolean notifyOfAfkPlayer(Collection<Player> onlinePlayers, AfkPlayer afkPlayer) {

        if (afkPlayer == null) {

            return false;
        }

        String message = ChatColor.BLUE + afkPlayer.getPlayer().getDisplayName();
        message += ChatColor.AQUA + " is AFK.";

        if (afkPlayer.getReason().length() > 0) {

            message += " [" + afkPlayer.getReason() + "]";
        }


        if (onlinePlayers != null && onlinePlayers.size() > 1) {

            int notified = 0;

            for (Player onlinePlayer : onlinePlayers) {

                onlinePlayer.sendMessage(message);
                notified++;
            }

            if (notified > 0) {

                return true;
            }
        }

        return false;
    }
}

为什么这会给我 AssertionError:

java.lang.AssertionError:意外的方法调用 Player.sendMessage("§9TEST PLAYER§b is AFK. [TEST REASON]"): Player.sendMessage("§9TEST PLAYER§b is AFK. [TEST REASON]"):预期:1,实际:0 org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:44) 在 org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:94) 在 com.sun.proxy.$Proxy3.sendMessage(未知来源) crm.afk.AfkPlayerManager.notifyOfAfkPlayer(AfkPlayerManager.java:33) 在 crm.test.AfkTest.testNotifyOfAfkPlayerSuccess(AfkTest.java:84) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)在 java.lang.reflect.Method.invoke(未知来源)在 junit.framework.TestCase.runTest(TestCase.java:176) 在 junit.framework.TestCase.runBare(TestCase.java:141) 在 junit.framework.TestResult$1.protect(TestResult.java:122) 在 junit.framework.TestResult.runProtected(TestResult.java:142) 在 junit.framework.TestResult.run(TestResult.java:125) 在 junit.framework.TestCase.run(TestCase.java:129) 在 junit.framework.TestSuite.runTest(TestSuite.java:252) 在 junit.framework.TestSuite.run(TestSuite.java:247) 在 org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

【问题讨论】:

    标签: java testing junit mocking easymock


    【解决方案1】:

    预期和实际不同。

    预期:§9TEST PLAYER§b is AFK. [TEST REASON] 实际:§9TEST PLAYER§b is AFK. [TEST REASON]

    缺少开头的 Â。所以它应该失败了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      相关资源
      最近更新 更多