2014-12-14 1 views
2

jOOQ 3.5.0jOOQ: Mocking DAO объекты

В настоящее время я пытаюсь писать тесты для ресурса, который использует jOOQs генерироваться объекты DAO.

Я заметил один из базовых классов (DAOImpl) в иерархии DAO имеет много final методов, что делает его недружелюбно издеваться (я исключая байт-код манипуляторов как Powermock в виде раствора). В настоящее время я использую шаблон MockConnection и MockDataProvider, чтобы заполнить мои DAO, но похоже, что это немного низкий уровень для утверждения вызовов метода DAO.

В качестве примера, мой ресурс вызывает FooDao.createFoo(foo), а моя точка перехвата в тесте - MockDataProvider.execute(...), которая предоставляет мне объект контекста с необработанным SQL и массив объектов привязки значений.

Для того, чтобы тест утверждал, что был вызван create, мне нужно будет оценить необработанный sql. Кажется расточительным делать что-то подобное, когда у DAO есть хорошие, быстрые методы, на которые можно было бы утверждать.

Итак, мой вопрос: есть ли лучший способ использования теста DAO? Похоже, мне нужно много котельной пластина, чтобы проверить один простой контракт ....

FooDao fooDao = createMock(FooDao.class); 
.... 
when(fooDao.fetchById(id)).thenReturn(foo); 

гораздо предпочтительнее example in the docs.

+0

Что удерживает вас от использования Powermock? –

+0

В качестве альтернативы, вы можете использовать ['DAO'] (http://www.jooq.org/javadoc/3.5.x/org/jooq/DAO.html) вместо' DAOImpl' и программировать (т.е. макет) интерфейс ? – Xaerxess

+0

@Xaerxess Между 'FooDao' и' DAO' слишком много деталей. Это означает, что LOT для котельной плиты для меня для КАЖДОГО DAO просто для того, чтобы написать чистый тест. – markdsievers

ответ

1

Прямо сейчас будет сложно издеваться над jOOQ DAO, не используя что-то вроде PowerMock, которое удаляет final из байт-кода для вас, чтобы переопределить эти методы.

В предстоящем jOOQ 3.6 мы планируем внедрить разработку кода интерфейса для DAO. Это было бы легче насмехаться.

Смотрите также: https://github.com/jOOQ/jOOQ/issues/3868

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

  • Нет связанных вопросов^_^