2015-02-24 1 views
0

Я создал небольшое веб-приложение весной boot.I новое для TestNG. Я пытаюсь проверить свои услуги с помощью testng, который вызывает dao для операций с базой данных. Я пытаюсь сделать это, используя inmemory базу данных HSQL.Как протестировать вызовы базы данных с помощью testng в весеннем ботинке

Ниже мой UserService

@Service 
class UserServiceImpl implements UserService 
{ 
    public void save(User user) 
    { 
     userDao.save(user); 
    } 

    public User update(user) 
    { 
     userDao.update(user); 
    } 
} 

Ниже мой UserTest класс

@Test 
class UserTest 
{ 
    ? 
} 

Что хороший способ использовать HSQL испытать save и update методы UserService использованием TestNG с DataProvider? Пожалуйста, дайте мне знать, если потребуется дополнительная информация по вопросу;)

Ваш отзыв будет рад!

+2

Как насчет насмешек над DAO? – questionare

+0

, пожалуйста, уточните свой ответ. –

+3

Вы можете использовать фреймворк, как Mockito, и создать макет для вашего UserDao. – questionare

ответ

2

Если вы просто хотите проверить правильность вызова dao, издевайтесь над ним с насмешкой (я бы выбрал Mockito) и просто проверил, что ваши службы вызывают правильные методы. Это больше похоже на «единицу», поскольку ваши тесты отражают четкое разделение дао и обслуживания.

Если вас интересует реальная связь БД для создания/загрузки экземпляров и т. Д., Вы можете использовать базу данных памяти, такую ​​как h2, и позволить вашему dao работать с этой базой данных. Это становится скорее интеграционным тестом, но может быть полезным, тем не менее.

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

0

Acolyte обеспечивает водителю JDBC & инструменты, предназначенные для таких целей (макете, тестирование, ...): https://github.com/cchantep/acolyte

Это уже используется в нескольких проектах с открытым исходным кодом (Anorm, Youtube VITESS, ...) , либо в ванильной Java, либо с использованием Scala DSL:

handler = handleStatement.withQueryDetection(...). 
    withQueryHandler(/* which result for which query */). 
    withUpdateHandler(/* which result for which update */). 

// Register prepared handler with expected ID 'my-unique-id' 
acolyte.Driver.register("my-unique-id", handler); 
// then ... 
Connection con = DriverManager.getConnection(jdbcUrl); 
// ... Connection |con| is managed through |handler|