我看了this post about mocking Entity Framework(EF)。
我们不应该抽象实体'类型也是?为了保持数据访问层(DAL)和业务层(BL)之间的解耦?
在上面的帖子中,他使用了EF具体生成的实体类型:
[TestMethod]
public void GetCustomer()
{
ContextContainerMock container = new ContextContainerMock();
IMyEntities en = container.Current;
**Customer c = new Customer { ID = 1, FirstName = "John", LastName = "Doe" };**
en.Customers.AddObject(c);
CustomerService service = new CustomerService(container);
var a = service.GetCustomer(1);
Assert.AreEqual(c.FirstName, a.FirstName);
Assert.AreEqual(c.LastName, a.LastName);
}
答案 0 :(得分:2)
就个人而言,我不会嘲笑这些。我直接创建,测试和清理。这有助于我在处理数据库时捕获更真实的场景问题。 Mocking非常适合测试集成,在这些集成中您可能无法访问像DB这样的资源。如果这是你的情况,那么你可能别无选择。希望有所帮助。
答案 1 :(得分:0)
简短的回答是否定的。
如果正确完成,实体不依赖于任何其他代码,除了其他实体和值对象(例如string,int或您自己的值对象)。因此,没有必要嘲笑它们。
此外,这些实体是您系统核心的一部分。它们就是您的系统的全部内容。您通常希望测试系统在对这些类进行操作时的行为,而不是测试系统的行为,就像操作测试所说的时的行为一样。
(作为旁注,你的实体应该看起来像现实世界中存在的东西。也就是说,你应该能够从商业方面的非技术人员那里推断出这种行为。从你的例子我看到可以创建一个没有名字的客户。从业务的角度来看,这是否正常?如果没有,我会说你应该让构造函数将名字和姓氏作为参数。 )