Ale*_*aca 3 silverlight wpf tdd devforce
我将启动一个需要Web和桌面界面的项目.一个解决方案似乎是IdeaBlade(http://www.ideablade.com).任何使用它的人都可以描述它的局限性和优势吗?它可以测试吗?
谢谢,亚历克斯
作为IdeaBlade的技术副总裁,我不能一般性地评论DevForce在这个领域的局限性和优势.很高兴回答具体问题.
它可以测试吗?对此我可以回答一下答案的开头.
这是一个有争议的问题.人们对什么使可测试的东西有强烈的感觉.让我将自己局限于特定的测试场景......然后判断我们满足您的测试要求的程度.
1)DevForce支持纯POCO实体,如果这是您的偏好.大多数人更愿意使用从我们的基本实体类派生的实体,因此我将后续的评论完全限制在这些实体中.
2)你可以使用你喜欢的任何ctor新建这样的实体,并获得并设置其(非导航)属性而无需其他设置.
var cust = new Customer {ID=..., Name =...}; // have fun
Run Code Online (Sandbox Code Playgroud)
当然需要汇编参考.
3)要测试其导航属性(返回其他实体的属性),首先要新建一个EntityManager(我们的工作单元,类似上下文的容器),将实体添加或附加到EM,然后离开.从我们的基类继承的实体的导航属性期望通过该容器找到相关实体.
4)在大多数自动化测试中,EntityManager将在断开连接状态下创建,以便它永远不会尝试访问服务器或数据库.
您可以添加订单,客户,一些OrderDetails; 请注意,所有这些都是在测试环境中构建的......不能从任何地方检索.
现在order.Customer返回测试Customer; 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
Run Code Online (Sandbox Code Playgroud)
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();
Run Code Online (Sandbox Code Playgroud)
6)当然,我总是在每次测试之前创建一个新的EntityManager,以消除交叉测试污染.
7)我经常编写一个所谓的"数据母亲"测试帮助程序类,用一个标准的测试数据集合填充EM,包括异常情况.
8)我可以将EntityManager的测试实体缓存导出到文件或测试项目资源.测试运行时,DataMother可以检索和恢复这些测试实体.
观察我正在逐步远离单元测试和集成测试.但是(到目前为止)我的测试不需要访问服务器,实体框架或数据库.它们运行速度快,不易受到设置故障的影响.
当然,您可以通过深度集成测试访问服务器,并且可以轻松地为本地,LAN和Web方案动态切换服务器和数据库.
9)您可以拦截查询,保存,更改,添加,删除和其他事件以进行交互测试.
10)我所描述的所有内容都适用于常规.NET和Silverlight以及我遇到的每个测试框架.
在不利方面,我不会将我们的产品描述为模拟友好.
我欣然承认我们不是持久无知(PI).如果你是PI狂热分子,我们是你错误的选择.
我们尝试了解PI的重要优势,并尽最大努力在我们的产品中实现它们.我们尽我们所能来排除框架问题.不过,正如你所看到的,我们的抽象漏洞在一些地方泄漏.例如,我们将这些成员添加到您的实体的公共API中:
就个人而言,我会把它减少到两个(EntityAspect,PropertyChanged); 其他人偷偷地走了过来.对于它的价值,从Object继承(你必须)贡献另一个无关的五.
我们认为我们在纯粹的PI和易于开发之间做出了很好的权衡.
我的问题是"它是否能为您提供所需的验证期望,而不会产生很大的摩擦......从单元到深度集成测试的整个范围?"
我当然很想知道如何获得与类似产品摩擦较小的类似设施.并且渴望就如何改进我们对应用程序测试的支持提出建议.
随意关注我可能忽略的其他测试场景的问题.
希望这可以帮助
病房
| 归档时间: |
|
| 查看次数: |
736 次 |
| 最近记录: |