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

时间:2015-03-03 10:48:12

标签: spring testng mockito

我是testng(单元测试)和mockito的新手。我已经阅读了一些文章,并在互联网上浏览了一些代码片段。但我对testng&的单元测试仍有疑问。 mockito中的spring framework

  1. 对于服务层的单元测试,我们模拟DAO。如果我想测试从数据库中获取一些数据并执行某些操作的函数,该怎么办?模拟DAO如何在这里工作。从模拟的DAO将获得一些数据来测试这样的功能。
  2. 如果我正在进行验证,例如Data中没有数据,我想测试它会为它抛出正确的异常。所以它需要数据库中的一些值,并且模拟DAO将检查该预定义数据库(内存中)中是否存在数据。如何提供这样的数据。
  3. dataprovider是否有助于提供DAO使用的数据。如果是的话,怎么做?
  4. 如果我对单元测试的理解是正确的,请纠正我。如果我错过理解概念,请告诉我错误的地方。 谢谢。

1 个答案:

答案 0 :(得分:0)

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

  1. 如果我正确地理解了你的意图,这实际上听起来像是模拟你的数据库/持久性对象的一个​​完美的理由 - 让它抛出预期的异常/返回一个空的结果,测试你的代码在这个上按预期运行条件。

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