如何在 spring 启动时使用 testng 测试数据库调用

How to test database calls with testng in spring boot

我在 spring 中创建了小型 Web 应用程序 boot.I 是 TestNG 的新手。我正在尝试使用 testng 测试我的服务,它调用 dao 进行数据库操作。我正在尝试使用内存数据库 HSQL.

以下是我的UserService

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

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

以下是我的UserTestclass

@Test
class UserTest
{
    ?
}

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

非常感谢您的回复!!

如果您只想测试 dao 是否被正确调用,请使用模拟框架模拟它(我会选择 Mockito)并验证您的服务是否调用了正确的方法。这更 "unit" 像,因为你的测试反映了 dao 和服务的明确分离。

如果您对与 create/load 实例等的真实数据库通信感兴趣,您可以使用像 h2 这样的内存数据库,并让您的 dao 运行 针对该数据库。这更像是一个集成测试,但越少越好none。

无论哪种方式,您都可以设置一个关心数据源和模拟的测试应用程序上下文。

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|

注:我是《侍僧》的作者。