我看过的许多例子在单元测试项目中使用了Moq(或另一个嘲笑框架),但是我想要像我的持久层一样,让我的网站显示数据和东西,但它不是来自数据库。我想做最后。我所看到的所有嘲笑的东西只存在于单元测试中。
人们想要(stub?)伪造出持久层以快速,快速地开发时,做什么做法?我使用依赖注入来处理它,并为我的持久层提供一些硬编码的结果(这真的是手动和无聊)。
其他人在做什么?示例和链接会很棒:)
UPDATE
只是一点点更新:到目前为止,我有一个公平的里程没有一个假存储库和一个SQL存储库 – 每个类实现一个接口。然后,使用DI(我使用StructureMap),我可以在我的假存储库或SQL存储库之间切换。到目前为止,它的工作很好:)
(也惊讶地认为我在近11个月前提到这个问题,从我正在编辑这个,现在呢!)
解决方法
http://blog.wekeroad.com/mvc-storefront/mvc-storefront-part-1/
我遵循Rob Conery的教程,但遇到与你相同的想法。最好的做法是将您创建的Mock Repository移动到一个名为Mocks的独立项目中,然后当您实例化服务时,您可以轻松地将其与实际交换。如果您的感觉冒险,您可以创建一个工厂,从配置文件获取值来实例化模拟或真正的存储库,
例如
public static ICatalogRepository GetCatalogRepository(bool useMock) { if(useMock) return new FakeCatalogRepository(); else return new SqlCatalogRepository(); }
或者使用依赖注入框架:)
container.Resolve<ICatalogRepository>();
祝你好运!
编辑:响应您的意见,听起来像您想使用列表和LINQ来模拟数据库的操作,例如GetProducts,StoreProduct。我以前做过这个。以下是一个例子:
public class Product { public int Identity { get; set; } public string Name { get; set; } public string Description { get; set; } //etc } public class FakeCatalogRepository() { private List<Product> _fakes; public FakeCatalogCatalogRepository() { _fakes = new List<Product>(); //Set up some initial fake data for(int i=0; i < 5; i++) { Product p = new Product { Identity = i,Name = "product"+i,Description = "description of product"+i }; _fakes.Add(p); } } public void StoreProduct(Product p) { //Emulate insert/update functionality _fakes.Add(p); } public Product GetProductByIdentity(int id) { //emulate "SELECT * FROM products WHERE id = 1234 var aProduct = (from p in _fakes.AsQueryable() where p.Identity = id select p).SingleOrDefault(); return aProduct; } }
这有点更有意义吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。