2016-10-24 6 views
0

Я не могу решить, как настроить ожидание вызова класса-макета. Вот тест JUnit:Метод неожиданного метода EasyMock

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: Unexpected method call Player.sendMessage("§9TEST PLAYER§b is AFK. [TEST REASON]"): Player.sendMessage("§9TEST PLAYER§b is AFK. [TEST REASON]"): expected: 1, actual: 0 at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:44) at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:94) at com.sun.proxy.$Proxy3.sendMessage(Unknown Source) at crm.afk.AfkPlayerManager.notifyOfAfkPlayer(AfkPlayerManager.java:33) at crm.test.AfkTest.testNotifyOfAfkPlayerSuccess(AfkTest.java:84) 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 junit.framework.TestCase.runTest(TestCase.java:176) at junit.framework.TestCase.runBare(TestCase.java:141) at junit.framework.TestResult$1.protect(TestResult.java:122) at junit.framework.TestResult.runProtected(TestResult.java:142) at junit.framework.TestResult.run(TestResult.java:125) at junit.framework.TestCase.run(TestCase.java:129) at junit.framework.TestSuite.runTest(TestSuite.java:252) at junit.framework.TestSuite.run(TestSuite.java:247) at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86) 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)

ответ

0

Ожидаемый и фактические разные.

Ожидаемое: §9TEST PLAYER§b is AFK. [TEST REASON] Актуально: §9TEST PLAYER§b is AFK. [TEST REASON]

перечисленными выше в начале отсутствует. Так оно терпит неудачу как оно должно.

Смежные вопросы