Как написать контрольные примеры для сложного базового объекта? - PullRequest
2 голосов
/ 07 ноября 2011

Я пишу тестовые примеры для существующей системы. Архитектура для базовых классов сама по себе очень сложна.

Blockquote RequestHanndler ==> процессы ==> Порядок ===> зависит от ==> уровня обслуживания == подключен к ==> уровню БД.

Я пишу контрольный пример для RequestHandler. Тестируемый метод (doProcess()) создает новый экземпляр класса Order. Сам класс Order очень сильно зависит от уровня сервиса. Я хочу создать атомарный контрольный пример, поэтому никакой другой слой кода не будет выполнен.

Какой должен быть лучший процесс для создания тестовых случаев для этих сценариев?

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

Это может быть немного сложнее, если вы хотите написать модульные тесты для тесно связанного кода.Чтобы упростить уни-тестирование, лучше опираться на абстракции, а не на реальные реализации.Например, класс Order не должен зависеть от реальной реализации сервисного уровня, вместо этого вводите интерфейс, который намного проще моделировать, чем класс, который может быть установлен на final.

RequestHandler отвечает за создание экземпляров Order, которые вы должны предоставить, чтобы смоделировать класс Order в модульных тестах.Простой способ - создать защищенный метод, который просто создает новый экземпляр заказа.

protected Order createOrder(String someParam) {
  return new Order(someParam);
}

В ваших модульных тестах вы теперь можете расширить класс и перезаписать фабричный метод.Используя Mockito это будет выглядеть так:

protected Order createOrder(String someParam) {
  Order order = Mockito.mock(Order.class); // create mock object
  // configure mock to return someParam when 
  //  String Order#getSomeParam() gets invoked
  Mockito.doReturn(someParam).when(order).getSomeParam(); 
  return order;
}
1 голос
/ 07 ноября 2011

Типичным подходом для модульного тестирования таких систем является макетирование. Есть несколько макетов для Java. Я лично использовал EasyMock, но есть и другие.

Итак, я думаю, что вам следует сначала попробовать проверить логику обработчика запросов. Вы должны смоделировать Order (т.е. создать фиктивный, а не реальный экземпляр порядка, используя макет frameork). Когда этот слой протестирован, углубляйтесь и начинайте тестировать внутренние слои.

Другая стратегия идет снизу вверх, то есть сначала тестируйте внутренние слои. Эта стратегия, вероятно, «правильная», но вы не получите быстрых результатов, которые вы можете показать своему менеджеру, потому что менеджерам обычно нравится видеть «большую» картину и очень редко вдаваться в детали.

Итог: удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...