如何在 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);
}
}
以下是我的UserTest
class
@Test
class UserTest
{
?
}
使用 HSQL 测试 UserService 中的 save
和 update
方法的好方法是什么 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|
注:我是《侍僧》的作者。
我在 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);
}
}
以下是我的UserTest
class
@Test
class UserTest
{
?
}
使用 HSQL 测试 UserService 中的 save
和 update
方法的好方法是什么 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|
注:我是《侍僧》的作者。