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.
Что удерживает вас от использования Powermock? –
В качестве альтернативы, вы можете использовать ['DAO'] (http://www.jooq.org/javadoc/3.5.x/org/jooq/DAO.html) вместо' DAOImpl' и программировать (т.е. макет) интерфейс ? – Xaerxess
@Xaerxess Между 'FooDao' и' DAO' слишком много деталей. Это означает, что LOT для котельной плиты для меня для КАЖДОГО DAO просто для того, чтобы написать чистый тест. – markdsievers