- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找为典型的 DAO 方法构建单元测试的信息(通过用户名查找用户等),我发现了几个使用模拟的示例,如下所示:http://www.christophbrill.de/de_DE/unit-testing-with-junit-and-mockito/
@Test
public void testComeGetSome() {
// Mock the EntityManager to return our dummy element
Some dummy = new Some();
EntityManager em = Mockito.mock(EntityManager.class);
Mockito.when(em.find(Some.class, 1234)).thenReturn(dummy);
// Mock the SomeDao to use our EntityManager
SomeDao someDao = Mockito.mock(SomeDao.class);
Mockito.when(someDao.comeGetSome(1234)).thenCallRealMethod();
Mockito.when(someDao.getEntityManager()).thenReturn(em);
// Perform the actual test
Assert.assertSame(dummy, someDao.comeGetSome(1234));
Assert.assertNull(someDao.comeGetSome(4321));
}
Lasse Koskela 的书中也有类似的使用 EasyMock 而不是 Mockito。
问题是:我们在这些示例中真正测试的是什么?我们基本上是通过模拟告诉查询应该返回什么对象,然后断言它实际上返回了我们告诉它返回的对象。
我们不会测试查询是否正确,或者它是否返回不同的对象或根本没有对象(甚至多个对象)。当数据库中不存在该对象时,我们无法测试它是否返回 null。这条线
Assert.assertNull(someDao.comeGetSome(4321));
之所以有效,是因为该参数没有脚本交互,而不是因为该对象不存在。
看起来我们只是在测试该方法是否调用了正确的方法和对象 (em.find)。
单元测试的意义何在? Java 中是否有任何好的框架可以快速建立内存数据库并使用它执行测试?
最佳答案
你的疑惑还真有道理。实际上在大多数情况下不需要用单元测试来测试DAO,因为单元测试只处理一层,而DAO与数据库层配合。
这篇文章解释了这个想法: http://www.petrikainulainen.net/programming/testing/writing-tests-for-data-access-code-unit-tests-are-waste/
因此我们应该通过集成测试来测试 DAO 和数据库层。集成测试同时考虑了 DAO 和数据库层。
本文将为您提供 Spring + Hibernate 示例: https://dzone.com/articles/easy-integration-testing
关于java - 对单元测试 DAO 的怀疑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31475186/
#include class A { public: A() { std::cout (a_obj); // This isn't safe. b_obj
考虑 C 中的尾递归阶乘实现: #include unsigned long long factorial(unsigned long long fact_so_far, unsigned long
我定义了下面的max宏 #define max(a,b)(a>b?a:b); 在 main() 中我正在做以下事情 int t,a,b,c,d; t=max(a,b)+max(c,d); 但结果并不如
我是React Native的新手。 我试图按照官方的documentation和其他链接(如this)进行无意义的工作。 这个想法是这样的: 无头任务每隔一秒将1递增到存储中的值。 UI每隔3秒钟将
亲爱的学者们。我使用最新的 SDK (4.2.1) 创建了一个简单的应用程序,它在所有 iOS 4.x.x 设备上运行顺利且无错误。 最近,我收到一些使用较旧 iOS 版本的用户的评论,提示应用程序在
我把我的笔记本电脑从休眠状态恢复过来,因为所有的安卓模拟器在使用硬件加速时都无法启动。从那以后,我卸载了 Android Studio,所有 SDK 的所有模拟器并重新启动了多次。在删除并重新安装所有
我无法弄清楚为什么两个不同的 svg 会导致我的 javascript 在一个实例中工作,但在另一个实例中却不能。我只换掉了两个示例中的 svg 元素,一个有效,一个无效。这是两个 jsFiddle
我是防火墙新手。我今天早些时候在 ec2 实例上玩 iptables,但现在我无法通过 ssh 连接 - “连接超时”。控制台显示实例正在运行且 ssh key 正常,ping 成功。 所以我的结论是
我有一个使用 Xcode 7.3.1 构建的应用程序。此应用程序的最新更新添加了 Taplytics 框架并支持 iOS9 和 watchOS2。 使用 Crashlytics 分发版,我的 QA 团
我是一名优秀的程序员,十分优秀!