Java 连接到数据库的RESTAPI的Junit测试用例
我有一个JavaREST服务,它与数据库交互,执行一些操作并返回数据 我正在尝试为这些API编写测试用例 我正在尝试使用下面的链接作为参考来实现这一点 在这里,对数据库的调用被抑制,dto用虚构的值进行模拟 是否有另一种方法可以让我们在不与数据库对话的情况下运行查询(可能是内存中的数据库?)Java 连接到数据库的RESTAPI的Junit测试用例,java,rest,unit-testing,junit,automated-tests,Java,Rest,Unit Testing,Junit,Automated Tests,我有一个JavaREST服务,它与数据库交互,执行一些操作并返回数据 我正在尝试为这些API编写测试用例 我正在尝试使用下面的链接作为参考来实现这一点 在这里,对数据库的调用被抑制,dto用虚构的值进行模拟 是否有另一种方法可以让我们在不与数据库对话的情况下运行查询(可能是内存中的数据库?) 任何代码示例或参考都会有很大帮助。HSQLDB是我熟悉的内存数据库。这里展示的示例针对hibernate和JPA使用的HSQLDB 然而,我认为有必要问一下,在您的情况下,为什么您更喜欢连接内存中的db而
任何代码示例或参考都会有很大帮助。HSQLDB是我熟悉的内存数据库。这里展示的示例针对hibernate和JPA使用的HSQLDB 然而,我认为有必要问一下,在您的情况下,为什么您更喜欢连接内存中的db而不是模拟db? 它归结为您试图实现的测试单元/集成的范围。 您想在rest层中测试制造逻辑是什么?嘲笑就足够了。 您是否正在尝试测试rest如何处理数据访问行为,例如db错误处理等,而在内存中可能会稍好一些。
您正在测试的东西是否依赖于数据设置/测试数据设置,在这种情况下,内存数据库中的数据设置可能更接近,因为您可以使用相同/类似的sql创建在内存数据库中进行测试 HSQLDB是我熟悉的内存数据库之一。这里展示的示例针对hibernate和JPA使用的HSQLDB 然而,我认为有必要问一下,在您的情况下,为什么您更喜欢连接内存中的db而不是模拟db? 它归结为您试图实现的测试单元/集成的范围。 您想在rest层中测试制造逻辑是什么?嘲笑就足够了。 您是否正在尝试测试rest如何处理数据访问行为,例如db错误处理等,而在内存中可能会稍好一些。
您正在测试的东西是否依赖于数据设置/测试数据设置,在这种情况下,内存数据库中的数据设置可能更接近,因为您可以使用相同/类似的sql创建在内存数据库中进行测试 对于一个纯HashMap解决方案,类似这样的方法是可行的,但这样会使您失去对SQL查询功能的访问(除非您也模拟查询) 此后,您将使用spring为您插入SQL脚本:
@ActiveProfiles("test")
@SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)
@SqlGroup({
@Sql(statements = "DROP SCHEMA PUBLIC CASCADE"),
@Sql(scripts = "classpath:yourGeneratedSQL.sql"),
})
公共类DAOIgrationTest{对于一个纯HashMap解决方案,类似这样的方法可以工作,但是您可能会失去对SQL查询功能的访问(除非您也模拟查询) 此后,您将使用spring为您插入SQL脚本:
@ActiveProfiles("test")
@SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)
@SqlGroup({
@Sql(statements = "DROP SCHEMA PUBLIC CASCADE"),
@Sql(scripts = "classpath:yourGeneratedSQL.sql"),
})
公共类集成测试{谢谢!但是我们正在使用jdbc作为dao层。可以将其包含在测试范围内吗?是的,HSQLDB也可以与jdbc一起工作。您只需在上找到更多具体的示例,例如HSQLDB jdbc示例。您肯定希望它包含在测试范围内。我想您首先必须在测试中为dao创建一个适当的抽象版本是HSQLDBDAO实现,而真正的版本是您的DBDAO(例如oracle/sybase等)谢谢!但是我们正在使用jdbc作为dao层。可以将其包含在测试范围内吗?是的,HSQLDB也可以与jdbc一起工作。您只需在上找到更多具体的示例,例如HSQLDB jdbc示例。您肯定希望它位于测试范围内。我想您首先必须在测试范围内为dao创建一个适当的抽象ion是一个HSQLDBDAO实现,而真正的是您的DBDAO(例如oracle/sybase等)
@ActiveProfiles("test")
@SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)
@SqlGroup({
@Sql(statements = "DROP SCHEMA PUBLIC CASCADE"),
@Sql(scripts = "classpath:yourGeneratedSQL.sql"),
})