Как смоделировать метод void с помощью EasyMock, а затем как его протестировать с помощью assert? - PullRequest
0 голосов
/ 24 декабря 2018

Мне нужно выполнить модульное тестирование функции, которая выполняет внутренний вызов другого void метода.

Class TestClass {
    public void testMethod() {
        someOtherClass.testMethod(); // This is void method 
    }
}

Мне нужно смоделировать someOtherClass.testMethod(), а затем проверить testMethod из TestClass, используяassert.


Извините за мой пост, если он сбивает с толку.Позвольте мне сделать это более ясным.Мое намерение -

public void testMethodTest() { 
  TestClass tC = new TestClass(); SomeOtherClass obj = EasyMock.createNiceMock(SomeOtherClass.class); 
  tC.set(obj); 
  obj.testMethod(); 
  EasyMock.expectLastCall().andAnswer(new IAnswer() { 
     public Object answer() { // return the value to be returned by the method (null for void) 
       return null; 
     }
  }); 
  EasyMock.replay(obj); 
  tC.testMethod(); // How to verify this using assert. 
}

1 Ответ

0 голосов
/ 27 декабря 2018

То, что вы написали, работает.Однако это слишком сложно, и вы не проверяете, был ли на самом деле вызван метод void.Для этого вам нужно добавить EasyMock.verify(obj); в конце.

Затем, одна важная вещь: если вы вызываете метод void перед воспроизведением, он записывает вызов.Не нужно добавлять expectLastCall.Кроме того, вы могли бы использовать expectLastCall().andVoid() вместо IAnswer.

Вот как я бы написал:

@Test
public void testMethodTest() {
  TestClass tC = new TestClass();
  SomeOtherClass obj = mock(SomeOtherClass.class); // no need to use a nice mock
  tC.set(obj);

  obj.testMethod();

  replay(obj);

  tC.testMethod();

  verify(obj); // Verify testMethod was called
}
...