【问题标题】:How to test database calls with testng in spring boot如何在 Spring Boot 中使用 testng 测试数据库调用
【发布时间】: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
{
    ?
}

使用 TestNGDataProvider 使用 HSQL 来测试 UserService 中的 saveupdate 方法的好方法是什么?如果需要有关问题的更多信息,请告诉我;)

您的回复将不胜感激!

【问题讨论】:

  • 模拟 DAO 怎么样?
  • 请您详细说明您的答案。
  • 您可以使用 Mockito 之类的框架并为您的 UserDao 创建一个模拟。

标签: java spring-boot testng hsqldb database-testing


【解决方案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 的作者。

    【讨论】:

      猜你喜欢
      • 2013-11-05
      • 1970-01-01
      • 2020-06-23
      • 2019-05-17
      • 2019-03-03
      • 2022-01-04
      • 2020-07-10
      • 2016-06-30
      • 1970-01-01
      相关资源
      最近更新 更多