Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf IdeaBrade';什么是限制?_Wpf_Silverlight_Tdd_Devforce - Fatal编程技术网

Wpf IdeaBrade';什么是限制?

Wpf IdeaBrade';什么是限制?,wpf,silverlight,tdd,devforce,Wpf,Silverlight,Tdd,Devforce,我将开始一个项目,需要一个网络和桌面界面。一种解决方案似乎是IdeaBlade()。 使用它的人能描述一下它的局限性和优势吗?它是可测试的吗 谢谢, Alex作为iDeaBrade的技术副总裁,我不能对DevForce在这一领域的局限性和优势发表一般性评论。不过,我很乐意回答具体问题 它是可测试的吗?对此,我可以开始回答 这是一个可能引起争议的问题。人们对什么是可测试的有强烈的感觉。让我将自己局限于特定的测试场景。。然后你判断我们在多大程度上满足了你的测试要求 1) 如果您喜欢,DevForce

我将开始一个项目,需要一个网络和桌面界面。一种解决方案似乎是IdeaBlade()。 使用它的人能描述一下它的局限性和优势吗?它是可测试的吗

谢谢,
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
  • 财产变更
  • 询问
就我个人而言,我会把它减少到两个(实体方面,财产改变);其他人从我身边溜走。不管它值多少钱,从对象继承(您必须这样做)贡献了另外五个无关的因素

我们觉得我们已经在纯p.I.和易于开发之间做出了很好的权衡

我的问题是“它是否提供了验证期望所需的东西,而不会产生很大的摩擦……从单元测试到深度集成测试的整个范围?”

我当然很想知道你是如何用类似的产品获得摩擦更小的类似设备的。并渴望就如何改进对应用程序测试的支持提出建议

请随时提问我可能忽略的其他测试场景

希望这有帮助


沃德

谢谢你的回答,非常好,它说服我至少对产品进行评估。否则我就不会这么做了,因为我已经训练自己忽略流行语,而且它的描述大多是流行语。我最担心的是它可能缺乏灵活性。我喜欢端到端地测试“有趣的功能”。当这是不可能的,我定义一些边界,以便“结束”是明确的。在过去的几个月里,在一个智能客户端上工作,边界是GUI和数据层(由于测试EF的复杂性),但我正在关注project white将边界推到WPF GUI。