Wpf IdeaBrade';什么是限制?
我将开始一个项目,需要一个网络和桌面界面。一种解决方案似乎是IdeaBlade()。 使用它的人能描述一下它的局限性和优势吗?它是可测试的吗 谢谢,Wpf IdeaBrade';什么是限制?,wpf,silverlight,tdd,devforce,Wpf,Silverlight,Tdd,Devforce,我将开始一个项目,需要一个网络和桌面界面。一种解决方案似乎是IdeaBlade()。 使用它的人能描述一下它的局限性和优势吗?它是可测试的吗 谢谢, Alex作为iDeaBrade的技术副总裁,我不能对DevForce在这一领域的局限性和优势发表一般性评论。不过,我很乐意回答具体问题 它是可测试的吗?对此,我可以开始回答 这是一个可能引起争议的问题。人们对什么是可测试的有强烈的感觉。让我将自己局限于特定的测试场景。。然后你判断我们在多大程度上满足了你的测试要求 1) 如果您喜欢,DevForce
Alex作为iDeaBrade的技术副总裁,我不能对DevForce在这一领域的局限性和优势发表一般性评论。不过,我很乐意回答具体问题 它是可测试的吗?对此,我可以开始回答 这是一个可能引起争议的问题。人们对什么是可测试的有强烈的感觉。让我将自己局限于特定的测试场景。。然后你判断我们在多大程度上满足了你的测试要求 1) 如果您喜欢,DevForce支持纯POCO实体。大多数人更喜欢使用从我们的基本实体类派生的实体,因此我将在后面的发言中完全局限于此类实体 2) 您可以使用您喜欢的任何ctor新建这样的实体,并且不需要其他设置即可获取和设置其(非导航)属性
var cust = new Customer {ID=..., Name =...}; // have fun
当然,程序集引用是必需的
3) 要测试它的导航属性(返回其他实体的属性),首先需要新建EntityManager(我们的工作单元,类似于上下文的容器),将实体添加或附加到EM,然后离开。从基类继承的实体的导航属性期望通过该容器找到相关实体
4) 在大多数自动化测试中,EntityManager将在断开连接的状态下创建,这样它就不会试图访问服务器或数据库
您可以向其中添加订单、客户、一些OrderDetails;请注意,它们都是在测试上下文中构造的。。。从任何地方都找不到
现在订购。客户返回测试客户;order.OrderDetails返回您的测试详细信息。您的准备工作包括创建EM、测试实体,确保这些实体具有唯一的ID并关联
下面是一个示例序列:
var mgr = new EntityManager(false); // create disconnected
var order = new Order {ID = ..., Quantity = 1, ...};
var customer = new Customer {ID = 42, Name = "ABC", };
mgr.AttachEntity(order);
mgr.AttachEntity(customer);
order.Customer = customer; // associate them
EM充当内存中的数据库
5) 现在可以使用LINQ了
var custs = mgr.Customers.Where(c => c.Name.StartsWith("A").ToList();
var orders = mgr.Orders.Where(o => o.Customer.Name.StartsWith("A")).ToList();
6) 当然,我总是在每次测试之前创建一个新的EntityManager来消除交叉测试污染
7) 我经常编写一个所谓的“数据母亲”测试助手类,用标准的测试数据集合(包括异常情况)填充EM
8) 我可以将EntityManager的测试实体缓存导出到文件或测试项目资源。测试运行时,DataMother可以检索和恢复这些测试实体
请注意,我正逐步从单元测试转向集成测试。但是(到目前为止),我的测试不需要访问服务器、实体框架或数据库。它们运行速度快,不易受到分散注意力的安装失败的影响
当然,您可以在深度集成测试中访问服务器,并且可以轻松地为本地、LAN和web场景动态切换服务器和数据库
9) 您可以截取查询、保存、更改、添加、删除和其他用于交互测试的事件
10) 我所描述的一切都可以在常规的.NET和Silverlight中使用,也可以在我遇到的每个测试框架中使用
在缺点方面,我不会将我们的产品描述为模仿友好型
我欣然承认,我们并非无知(PI)。如果你是PI狂热分子,我们对你来说是错误的选择
我们努力欣赏PI的重要好处,并尽最大努力在产品中实现这些好处。我们尽我们所能将框架关注点转移到视野之外。不过,正如您所看到的,我们的抽象在一些地方存在漏洞。例如,我们将这些成员添加到实体的公共API中:
- EntityAspect(持久性感知的网关)
- 错误改变
- PendingEntityResolved
- 财产变更
- 询问
沃德谢谢你的回答,非常好,它说服我至少对产品进行评估。否则我就不会这么做了,因为我已经训练自己忽略流行语,而且它的描述大多是流行语。我最担心的是它可能缺乏灵活性。我喜欢端到端地测试“有趣的功能”。当这是不可能的,我定义一些边界,以便“结束”是明确的。在过去的几个月里,在一个智能客户端上工作,边界是GUI和数据层(由于测试EF的复杂性),但我正在关注project white将边界推到WPF GUI。