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

Spring 关于最佳使用testng和mockito的问题,spring,testng,mockito,Spring,Testng,Mockito,我对testng(单元测试)和mockito非常陌生。我在网上读了一些文章和代码片段。但是对于在spring框架中使用testng&mockito进行单元测试,我仍然有一些疑问 对于服务层的单元测试,我们模拟DAO。如果我想测试一个函数,从数据库中获取一些数据并执行一些操作,该怎么办。模拟刀在这里是如何工作的。模拟DAO将从中获得一些用于测试此类函数的数据 若我在做一个验证,比如数据库中并没有数据,我想测试它是否抛出了正确的异常。所以它需要数据库中的一些值,模拟DAO将检查预定义数据库(内存中)

我对testng(单元测试)和mockito非常陌生。我在网上读了一些文章和代码片段。但是对于在
spring框架中使用
testng
&
mockito
进行单元测试,我仍然有一些疑问

  • 对于服务层的单元测试,我们模拟DAO。如果我想测试一个函数,从数据库中获取一些数据并执行一些操作,该怎么办。模拟刀在这里是如何工作的。模拟DAO将从中获得一些用于测试此类函数的数据
  • 若我在做一个验证,比如数据库中并没有数据,我想测试它是否抛出了正确的异常。所以它需要数据库中的一些值,模拟DAO将检查预定义数据库(内存中)中是否存在数据。如何提供这样的数据
  • dataprovider是否帮助提供DAO使用的数据。如果是,如何做
  • 如果我对单元测试的理解是正确的,请纠正我。如果我没有理解一个概念,请告诉我哪里弄错了。 谢谢。

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

  • 如果我正确理解了您的意图,这实际上听起来像是模拟DB/持久性对象的完美理由——让它抛出预期的异常/返回空结果,测试代码在此条件下的行为是否符合预期

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