我發現很難測試EntityFramework 4。我使用它使用數據庫的第一種方法,現在太晚,以移動到poco.Needed交付相當快,沒時間照常學習。EF4存儲庫模式問題注入存儲庫到服務。似乎沒有得到它的權利
我已經實現了存儲庫模式與工作單元,但我發現很難注入一個存儲庫到我的服務層,以便我可以測試我的業務層服務,驗證等行爲...沒有擊中數據庫。 但我在許多小問題上招致。
爲了將Repository注入服務(構造函數),調用層需要引用DAL(EF實體)。我不想這
如果我有很多存儲庫EG CustomerRepository,EmployeeRepository比我需要有多少構造函數作爲存儲庫,以便我可以注入存儲庫。
3.不確定該從哪裏出發。我沒有在網上找到任何使用EF4將資源庫注入服務的例子。我見過的所有例子都是嘲笑自己的存儲庫,這對我並不好。
我需要測試我的服務層/ BizLayer沒有擊中數據庫。
所有的事情都是不可測試的,並增加了這麼多的依賴和問題。
諾迪比如我已經把
public class DepartmentServiceLibrary
{
private readonly IDepartmentRepository _departmentRepository;
public DepartmentServiceLibrary(IDepartmentRepository departmentRepository)
{
_departmentRepository = departmentRepository;
}
public List<DepartmentDto> GetDepartments()
{
return DeparmentBiz.GetDepartments();
}
private DeparmentBL _departmentBiz;
private DeparmentBL DeparmentBiz
{
get
{
return _departmentBiz ?? new DeparmentBL(_departmentRepository);
}
}
}
//內部類
internal class DeparmentBL
{
private readonly IDepartmentRepository _departmentRepository;
public DeparmentBL(IDepartmentRepository departmentRepository)
{
_departmentRepository = departmentRepository;
}
public List<DepartmentDto> GetDepartments()
{
using (var ctx = new AdventureWorksContext())
{
var uow = new UnitOfWork(ctx);
_departmentRepository.UnitOfWork = uow;
var query = _departmentRepository.GetAll();
return query.Select(dpt => new DepartmentDto
{
DepartmentId = dpt.DepartmentID,
Name = dpt.Name,
GroupName = dpt.GroupName
}).ToList();
}
}
}
以下TestMethod的要求我一個引用添加到其擊敗點的dal
[TestMethod]
public void Should_be_able_to_call_get_departments()
{
var mock = new Mock<IDepartmentRepository>();
var expectedResult = new List<Department>(); //Dependency to DAL as Department is a EF Entity generated by EF.
mock.Setup(x => x.GetAll()).Returns(expectedResult);
var companyService = new MyCompanyBL(mock.Object); //InternalVisibileTO
var departments = companyService.GetAll();
//assert removed for brevity
任何建議或例子顯示如何做到這一點? 感謝
}
發現只是證實了我的fears.Do我需要學習t4.Everything我做我必須能夠解釋。我會給它一個 – user9969 2010-12-13 10:44:12
隨着poco我想你轉向代碼生成和使用t4 templates.How有關存儲過程,複雜類型等。如何處理它們在poco.Do你產生它們? – user9969 2010-12-13 10:56:04
@ user231465 - 這裏是T4 POCO Generator:http://visualstudiogallery.msdn.microsoft.com/en-us/23df0450-5677-4926-96cc-173d02752313。你不需要「學習」T4本身。只需安裝它,讓它生成您的POCO - 並將生成的POCO移到單獨的程序集。 – RPM1984 2010-12-13 11:08:04