如何在 Spring Boot 中使用 testng 测试数据库调用
Posted
技术标签:
【中文标题】如何在 Spring Boot 中使用 testng 测试数据库调用【英文标题】:How to test database calls with testng in spring boot 【发布时间】:2015-02-24 08:34:41 【问题描述】:我在 Spring Boot 中创建了小型 Web 应用程序。我是 TestNG 的新手。我正在尝试使用调用 dao 进行数据库操作的 testng 测试我的服务。我正在尝试使用内存数据库HSQL
。
以下是我的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
?
使用 TestNG 和 DataProvider 使用 HSQL 来测试 UserService 中的 save
和 update
方法的好方法是什么?如果需要有关问题的更多信息,请告诉我;)
您的回复将不胜感激!
【问题讨论】:
模拟 DAO 怎么样? 请您详细说明您的答案。 您可以使用 Mockito 之类的框架并为您的 UserDao 创建一个模拟。 【参考方案1】:如果您只是想测试是否正确调用了 dao,请使用模拟框架(我会选择 Mockito)对其进行模拟,然后验证您的服务是否调用了正确的方法。这更像是“单元”,因为您的测试反映了 dao 和服务的明确分离。
如果您对创建/加载实例等的真实数据库通信感兴趣,您可以使用像 h2 这样的内存数据库并让您的 dao 针对该数据库运行。这更像是一个集成测试,但仍然很有用。
无论哪种方式,您都将设置一个关心数据源和模拟的测试应用程序上下文。
【讨论】:
【参考方案2】:Acolyte 提供 JDBC 驱动程序和工具,专为此类目的(模拟、测试等)而设计:https://github.com/cchantep/acolyte
它已经在几个开源项目(Anorm、Youtube Vitess,...)中使用,无论是在 vanilla 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|
注意:我是 Acolyte 的作者。
【讨论】:
以上是关于如何在 Spring Boot 中使用 testng 测试数据库调用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 中使用 Spring Security 启用 CORS
如何在 Spring Boot 中使用 Spring Security 配置 CORS? [复制]
如何在Spring Boot 中使用 HandlerMethodArgumentResolver