当单元测试,它是一个必须的测试CRUD操作时使用数据库? 可以在SQL与此精简版的帮助? 你有没有在内存中莫名其妙CRE创建的数据库?
我使用MbUnit的。
当单元测试,它是一个必须的测试CRUD操作时使用数据库? 可以在SQL与此精简版的帮助? 你有没有在内存中莫名其妙CRE创建的数据库?
我使用MbUnit的。
集成号实际DB是集成测试 。 没有单元测试。
是的,你可以,如果你不能抽象的(模拟)您的DAL /以任何其他方式使用DAO任何内存数据库SQLite的类似或MS SQL紧凑这一点。
考虑到这一点我必须指出, 单元测试可以一路DAL,但不DAL本身 。 DAL必须与某种集成测试实际DB的测试。
如同所有复杂的问题,得到的答案是:这取决于:)
一般来说,你应该隐藏你的数据访问层的接口后面,这样就可以测试应用程序的其余部分,而无需使用一个数据库,但如果你想测试的数据访问实现本身是什么?
在某些情况下,一些人认为这是多余的,因为他们大多使用声明的数据访问技术,如奥姆斯。
在其他情况下,数据访问组件本身可能包含你可能需要测试一些逻辑。 这可能是做一个完全相关的事情,但你需要对数据库做到这一点。
有些人认为这是集成测试单元测试来代替,但在我的书,它并没有太大的关系,你叫什么 - 最重要的事情是,你值超出你的全自动化测试,你绝对可以使用一个单元测试框架来驱动这些测试。
前阵子我写了一篇关于如何做到这一点的SQL Server上 。 要记住,最重要的是要避免的诱惑,创造一个通用夹具与一些“代表数据”,并试图在所有测试重用此。 相反,你应该在填写数据为每个测试的一部分,后清理。
当单元测试,它是一个必须的测试CRUD操作时使用数据库?
假设对于您已经提取圆说CRUD操作界面和测试过的一切,使用所述通过嘲笑或存根接口片刻。 现在,您留下了一段代码,它是一个包含一些代码绑定的对象和一些SQL Save方法。
如果是这样的话,我将宣布一个“单位”,并说,你确实需要一个数据库,一个理想的至少是你的数据库的良好表现,免得你与厂商定义的SQL抓了出来。
我还让光使用嘲笑的,以迫使错误条件,但我不会测试保存方法本身只是嘲笑。 因此,尽管在技术上,这可能是一个集成测试,我还是会做它作为我的单元测试的一部分。
编辑 :错过了你的问题的2/3秒。 抱歉。
可以在SQL与此精简版的帮助?
我在内存数据库使用的过去和被咬伤作为任我使用的数据库和实时系统做了一些不同的东西或者他们花了一段时间来启动。 我建议每个开发人员具有开发本地数据库反正。
你有没有在内存中莫名其妙CRE创建的数据库?
在数据库是。 我使用DbUnit飞溅数据和手动保持模式了解最新的SQL脚本,但你可以只使用SQL脚本。 有一个开发商的本地数据库确实增加了一些额外的维护,你有两个架构和数据集,以跟上数据,但我个人认为是值得的,你可以肯定的是数据库层按预期工作。
正如其他人已经指出的那样,你要实现的目标是不是单元测试,但集成测试。
具有说,即使我喜欢的单元测试孤立地嘲笑,便没有什么不妥的集成测试。 所以,如果你觉得很有道理在上下文,就在您的测试策略集成测试。
现在,关于你的问题,我会找DbUnit.NET 。 我不知道这个工具的.NET版本,但我可以告诉你的是,Java版本是伟大的测试与数据库交互。 在几句话以后,DBUnit允许你把数据库中的一个已知的状态运行测试之前,并在表的内容进行断言。 真的很方便。 顺便说一句,我建议你阅读的最佳实践页面,即使你决定不使用这个工具。
真的,如果你正在写一个连接到数据库的测试,你正在做集成测试,而不是单元测试。
单元测试这样的操作,可以考虑使用模拟数据库对象的某些类型化。 举例来说,如果你有一个封装数据库交互的类,从中提取的接口,然后创建一个使用简单的内存中的对象,而不是实际连接到数据库继承类。
如上所述,这里的关键是让你的测试数据库中已知状态的测试运行之前。 在一个真实世界的例子,我有一对夫妇被在此之前,重新创建一组已知的测试数据的测试运行SQL脚本。 由此,我可以测试CRUD操作和验证新行(S)被插入/更新/删除。
我写了一个叫DBSNAPSHOT帮助集成测试 SQLSERVER数据库。
如果你的数据库架构频繁变化也将有助于对实际真正的数据库实例测试代码。 人们使用SqlLite的快速测试(因为数据库在内存中运行),但是当你想验证你的代码工作对你的数据库的实际构建,这是没有帮助的。
当测试你的数据库要遵循类似的模式:备份数据库,建立数据库进行测试,锻炼码,验证结果,将数据库还原到初始状态。
以上将确保你可以运行在隔离每个测试。 我DBSNAPSHOT工具将简化您的代码,如果你的写作是.NET。 我认为它更容易比DbUnit.NET使用。