当前位置: 首页 > 知识库问答 >
问题:

EasyMock意外方法调用

凌和颂
2023-03-14
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;
    }
}

为什么这给了我断言错误:

java.lang.AssertionError:意外的方法调用player.sendMessage(“§9 TEST Player§B is afk.[TEST REASON]”):player.sendMessage(“§9 TEST Player§B is afk.[TEST REASON]”):预期:1,实际:0在org.easyMock.internal.mockInvocationHandler.invoke(mockInvocationHandler.java:44)在org.easyMock.internal.objectMethodsFilter.invoke(33)在crm.TEST.afktest.testNotifyoffkPlayerSuccess(afktest.java:84)在sun.reflect.nativeMethodAccessorImpl.Invoke0(原生方法)在sun.reflect.nativeMethodAccessorImpl.Invoke(未知源)在java.lang.reflect.methodAccessorImpl.Invoke(未知源)在sun.reflect.delegatingMethodAccessorImpl.Invoke(未知源)在.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.runtest(testsuite.java:247)在junit.framework.testsuite.run.runner.testExecution.run(testExecution.java:38)在org.eclipse.jdt.internal.junit.runner.rontests(remotetestrunner.java:467)在org.eclipse.jdt.internal.junit.runner.remotetestrunner.java:467)在org.eclipse.jdt.internal.junit.runner.rontests(remotetestrunner.java:683)在

共有1个答案

慕凌龙
2023-03-14

预期的和实际的是不同的。

预期:§9测试播放器§B是AFK。[测试原因]实际:§9测试玩家§B是AFK。[测试原因]

开头的β丢失了。所以它应该失败。

 类似资料:
  • 问题内容: 这可能吗?我尝试过,但EasyMock抱怨时间必须> = 1 问题答案: 我设法提出了一个解决方案:

  • 问题内容: 我正在尝试使用EasyMock模拟一些数据库接口,以便可以测试包装方法中的业务逻辑。我在测试设置中使用通过以下方法返回的方法一直都很好。 然后在我的实际测试中 然后,该服务连接到dbmapper并返回对象(使用setter方法注入了映射器) 这些类型的模拟似乎工作正常。但是,当我尝试进行测试 此方法称为void方法。 正是这种方法使我无法解决问题。我尝试了以下 正如其他一些帖子/问题似

  • 问题内容: 我有一个方法,该方法在要测试的类的依赖项的类中返回void。 此类非常庞大,我仅使用其中的一种方法。我需要替换此方法的实现以进行测试,因为我希望它做一些不同的事情,并且需要能够访问此方法接收的参数。 我在EasyMock中找不到做到这一点的方法。我想我知道如何使用Mockito做到这一点,但除非绝对必要,否则我不想添加其他库。 问题答案: 如果我了解您要正确执行的操作,则应该可以使用:

  • 我尝试从以下方法创建单元测试,但我找不到一个解决方案来模拟每个方法内的调用,请您帮助我使用EasyMock为这些方法创建JUnit Test: 提前感谢

  • 因为save是一个void方法。 有人知道如何修复这个单元测试吗?

  • 我有一个这样的类 我怎样才能使用EasyMock来模拟我的其他方法()的调用? 背景: 最初,我将myOtherMethod编写为静态方法。为了进行测试,由于我无法模拟静态方法调用,我最终编写了一个调用静态方法的实例方法 我尝试用PowerMock模拟代码的静态方法versin,但在使用JSR-303 bean验证器时出现了一些错误(请参见此处),而且我也没有找到任何将PowerMockRunne