0

我在 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在 UserService 中使用HSQL进行测试save和方法的好方法是什么?如果需要有关问题的更多信息,请告诉我;)update

您的回复将不胜感激!!

4

2 回答 2

2

如果您只想测试是否正确调用了 dao,请使用模拟框架(我选择 Mockito)对其进行模拟,然后验证您的服务是否调用了正确的方法。这更像是“单元”,因为您的测试反映了 dao 和 service 的明确分离。

如果您对创建/加载实例等的真实数据库通信感兴趣,您可以使用像 h2 这样的内存数据库,并让您的 dao 针对该数据库运行。这更像是一个集成测试,但仍然很有用。

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

于 2015-02-26T10:05:20.437 回答
0

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 的作者。

于 2015-04-01T07:59:25.750 回答