无数据库 NUnit 测试
如何在没有数据库的情况下测试我的代码 (TDD) 的标准 CRUD 操作。是否有可能实现这样的隔离级别,以便我的代码独立于数据库。
非常感谢大家。
How can I test my code (TDD) for standard CRUD operations without having a database. Is it possible to achieve such level of isolation so that my code is database independent.
Thanks a lot guys.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
是的。您编写一个接口,其中包含您想要的对数据库的所有调用。
然后创建两个实现该接口的类。
人们可以真正访问您的数据库。
另一个只是假装它是一个模拟实现。
Yep. You write an Interface with all the call to the database you would want.
Then you create two classes that implement the interface.
One has real access to your database.
The other, just pretends, it's a mock implementation.
使用诸如 Rhino Mocks 之类的伪造品来模拟数据访问。这样,当您的测试运行时,它们将与假的进行交互,而不是一路深入到数据库。
Use fakes, like Rhino Mocks, to mock the data access. That way when your tests run they will interact with the fake instead of going all the way down to the database.
问题一:
我看到该帖子带有 nunit 标记,因此我假设是 .net 上下文。鉴于此,我个人已经在一个项目中成功地使用 SQLite 作为内存数据库几个月了(与 NHibernate 和常见的 DDD 模式一起)。
问题2:
我认为编写完全独立于数据库的代码是不可能的,但是 NHibernate 帮助我完成了 95% 的工作(但这个数字在很大程度上取决于您的具体上下文)。
此外,通过良好的数据访问模式,例如“存储库”和“工作单元”,代码库的其余部分可以 100% 与数据库无关。这同样适用于其他数据源,例如 CSV 和 XML 文件。
Q1:
I see that the post is tagged with nunit, so I assume a .net context. Given that, I've personally utilized SQLite as an in-memory database successfully in a project for a few months time now (together with NHibernate and common DDD-patterns).
Q2:
I don't think that it's possible to write fully database independent code, but NHibernate takes me 95% of the way there (but that number depends heavily on your specific context).
Furthermore, with good data-access patterns, e.g. «Repository» and «Unit of Work», the rest of the code base can be made 100% database agnostic. The same goes for other data sources, e.g. CSV and XML files.
您可以使用 Mock 对象测试业务层(以及一些表示层)。
使用 Mocks/Fakes,这样就不会从 DAL 调用数据库,而是调用假类并返回预定义的值。
为了测试 DAL,您将需要实际的数据库。您可以使用单元测试框架在数据库上运行简单的 CRUD。创建一个简单的测试数据库以及一个恢复点,并使用单元测试框架的设置和恢复。拆卸以确保您的数据库处于预期状态。
You can test the business layer (and some of the presentation layer) using Mock objects.
Use Mocks/Fakes so that instead of calling the database from the DAL a fake class will be called instead and return a predefined value.
In order to test the DAL you will need actual database. You can use a unit testing framework to run simple CRUD on the database. Create a simple test database as well as a restore point and use the unit testing framework's setup & teardown to make sure your database is in the expected state.