Условие EasyMock и логика

#unit-testing #testing #junit #easymock

#модульное тестирование #тестирование #junit #easymock

Вопрос:

Есть ли способ заставить EasyMock работать с условными обозначениями? В моем методе есть блок if-else, но тест проходит, только если я удаляю условный блок. Это может быть проблемой с JUnit, а не конкретно с EasyMock. У кого-нибудь есть какая-либо информация по этому поводу?

Комментарии:

1. пожалуйста, предоставьте пример кода, без него ваш вопрос очень сложно понять

Ответ №1:

Если я правильно понимаю ваш вопрос, вы хотите возвращать разные значения в зависимости от переменной. Лучший способ сделать это — использовать интерфейс IAnswer.

Допустим, у вас есть класс DAO, получающий цвет из точки:

 public class ColorDAO {
   public Color getColorFromPoint(Point point) {
       //Implementation
   }
} 
  

Вы можете создать ответ для этого:

 ColorDao colorDao = EasyMock.createMock(ColorDao.class);
EasyMock.expect(colorDao.getColorFromPoint(EasyMock.anyObject(Point.class))).andAnswer(new IAnswer<Color>() {    
         @Override
         public Color answer() throws Throwable {
            Point point = (Point) EasyMock.getCurrentArguments()[0];
            if (point .getX() > 0.0) {
               return Color.BLACK;
            }
            return Color.YELLOW;
         }
      });
EasyMock.replay(colorDao);
  

Надеюсь, это поможет 😉

Ответ №2:

Условие в тесте или тестируемый метод?

Если это есть в тесте, у вас может быть помощник, который настраивает ваши ожидания в зависимости от входных данных, или у вас могут быть ожидания для различных входных данных. Ни то, ни другое не зависит от поведения тестируемого метода.

Если это в тестируемом методе, то способ, которым вы настраиваете ожидания, не зависит от тестируемого метода, и вам нужно будет настроить ожидания для поведения вашего макета, как обычно.