asp.net – 在做TDD时如何最好地创建一个测试数据库?
|
在执行ASP.NET网站(例如ASP.NET MVC网站)时,创建测试持久层的最佳做法是什么? 我看过的许多例子在单元测试项目中使用了Moq(或另一个嘲笑框架),但是我想要像我的持久层一样,让我的网站显示数据和东西,但它不是来自数据库。我想做最后。我所看到的所有嘲笑的东西只存在于单元测试中。 人们想要(stub?)伪造出持久层以快速,快速地开发时,做什么做法?我使用依赖注入来处理它,并为我的持久层提供一些硬编码的结果(这真的是手动和无聊)。 其他人在做什么?示例和链接会很棒:) UPDATE 只是一点点更新:到目前为止,我有一个公平的里程没有一个假存储库和一个SQL存储库 – 每个类实现一个接口。然后,使用DI(我使用StructureMap),我可以在我的假存储库或SQL存储库之间切换。到目前为止,它的工作很好:) (也惊讶地认为我在近11个月前提到这个问题,从我正在编辑这个,现在呢!) 解决方法假设您正在使用Rob Conery的MVC商店前台的Repository模式: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;
}
}
这有点更有意义吗? (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – MVC捆绑客户端缓存
- asp.net-mvc – 断言操作重定向到正确的操作/路由
- asp.net-mvc-3 – ASP.NET MVC 3控制器路由 – 使
- asp.net-mvc – 具有长不存在的URL的ASP.NET MVC
- asp.net核心 – 在ASP.NET Core的WebDeploy期间,
- asp-classic – ASP/VBScript – Int()vs CInt()
- asp.net – .NET 4.5中的样式包和CSS中的图标
- asp.net-web-api – 如何从WEB API检索邮件?
- asp-classic – 如何在Classic ASP中延迟响应
- asp.net – 如何设置显示内联的Div元素的固定宽度
