【问题标题】:Questions regarding best use of testng and mockito关于最佳使用 testng 和 mockito 的问题
【发布时间】:2015-03-03 10:48:12
【问题描述】:
我对 testng(单元测试)和 mockito 很陌生。我已经阅读了一些文章并在 Internet 上浏览了一些代码 sn-ps。但是我仍然对在spring framework 中使用testng 和mockito 进行单元测试有一些疑问。
- 为了对服务层进行单元测试,我们模拟了 DAO。如果我想测试一个从数据库中获取一些数据并执行一些操作的函数怎么办。模拟 DAO 如何在这里工作。模拟的 DAO 将从哪里获得一些数据来测试这样的功能。
- 如果我正在做一个数据不存在于数据库中的验证,并且我想测试它是否会抛出正确的异常。因此它需要数据库中的一些值,并且模拟 DAO 将检查该预定义数据库(内存中)中是否存在数据。如何提供此类数据。
- dataprovider 是否有助于提供数据以供 DAO 使用。如果是,怎么做?
如果我对单元测试的理解是正确的,请纠正我。如果我错过了理解一个概念,请让我知道我在哪里弄错了。
谢谢。
【问题讨论】:
标签:
spring
testng
mockito
【解决方案1】:
1) 除了单元测试,您还需要集成和/或验收测试。
单元测试将测试您的 SUT - 单个测试单元,在这种情况下,特定服务类按预期工作,而不会将其与其他类或系统 (DB) 集成。但是,另外我会为此服务编写一个集成测试,从数据库中检索/操作测试数据。理想情况下,此测试不应对数据库中的数据做出任何假设,因此建议在执行测试之前插入您要查找的数据,例如使用 @Before 注释并将此测试数据实际提交到测试数据库中。但是,我进一步建议您在 @After 测试方法中对数据库进行适当的清理。可以自动回滚数据,但不是最理想的,尤其是如果您有像 Hibernate 或 JPA 这样的持久性框架。只有当您处理真正位于物理(而非虚拟!)数据库中的已提交数据时,您才能 100% 确定您的测试成功。
1234563条件。
TestNG Dataprovider 实际上与您正在寻找的相反 - 它是一种为您的测试方法提供数据数组的方法:
org.testng.annotations.DataProvider
注释类型 DataProvider
将方法标记为为测试方法提供数据。数据提供者名称默认为方法名称。带注释的方法必须返回一个 Object[][],其中每个 Object[] 都可以分配测试方法的参数列表。想要从该 DataProvider接收数据的 @Test 方法需要使用与该注解名称相同的 dataProvider 名称。