关于testng和mockito的最佳使用的问题



我对testng(单元测试)和mockito非常陌生。我在网上读了一些文章,浏览了一些代码片段。但对于testng&CCD_ 2中的CCD_。

  1. 对于服务层的单元测试,我们模拟一个DAO。如果我想测试一个从数据库中获取一些数据并进行一些操作的函数,该怎么办。mock DAO在这里是如何工作的。模拟的DAO将从哪里获得一些数据来测试这样的函数
  2. 若正在进行数据库中不存在数据这样的验证,并且我想测试它是否会抛出正确的异常。因此,它需要数据库中的一些值,模拟DAO将检查该预定义数据库(内存中)中是否存在数据。如何提供这样的数据
  3. dataprovider是否有助于提供DAO使用的数据。如果是,如何做到

如果我对单元测试的理解是正确的,请纠正我。如果我没有理解一个概念,请告诉我哪里错了。非常感谢。

1)除了UnitTest,您还需要集成和/或验收测试。单元测试将测试您的SUT-单个测试单元,在这种情况下,特定的服务类按预期工作,而不将其与其他类或系统(DB)集成。然而,另外,我将为该服务编写一个集成测试,用于从数据库中检索/操作测试数据。理想情况下,此测试不应对数据库中的数据做出任何假设,因此建议在执行测试之前插入您将要查找的数据,例如使用@before注释并将此测试数据实际提交到测试数据库中。然而,我进一步建议您在@After测试方法中对数据库进行适当的清理。自动回滚数据是可以做到的,但并不是最佳的,尤其是如果您有一个像Hibernate或JPA这样的持久性框架。只有当您处理的提交数据确实在物理(而不是虚拟!)数据库中时,您才能100%确定您的测试成功。

  1. 如果我正确理解了你的意图,这听起来确实是嘲笑你的DB/持久性对象的一个完美理由——让它抛出预期的异常/返回一个空结果,测试你的代码在这种情况下的行为是否符合预期。

  2. TestNG数据提供程序实际上与您所寻找的相反——它是向您的测试方法提供数据数组的一种方式:org.testng.annotations.DataProvider批注类型数据提供程序将方法标记为提供测试方法的数据。数据提供程序名称默认为方法名称。带注释的方法必须返回一个Object[][],其中可以为每个Object[]分配测试方法的参数列表。想要从该DataProvider接收数据的@Test方法需要使用与该注释的名称相等的DataProvider名称。

相关内容

  • 没有找到相关文章