2015-03-03 65 views
-1

我对testng(单元测试)和mockito非常新颖。我已经阅读了一些文章,并通过互联网上的一些代码片段。但我仍然怀疑有关单元测试testng & mockitospring framework有关testng和mockito的最佳用法的问题

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

如果我对单元测试的理解是正确的,请纠正我。如果我错过了解某个概念,请让我知道我错了什么。 谢谢。

回答

0

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

  • 如果我理解正确的打算,其实这听起来像是一个完美的理由嘲笑你的DB /持久性对象 - 使其抛出预期的异常/返回一个空的结果,该测试您的代码在此情况下的行为如预期。

  • 一个TestNG的数据提供程序实际上做的您正在寻找的正好相反 - 它是一种提供一组数据来测试方法: org.testng.annotations.DataProvider 注释类型的DataProvider 标记的方法作为一个测试提供数据方法。数据提供者名称默认为方法名称。带注释的方法必须返回一个Object [] [],其中每个Object []可以被分配测试方法的参数列表。希望从此DataProvider接收数据的@ Test方法需要使用一个dataProvider名称,该名称等于此注释的名称。