c# – TDD:帮助编写Testable类
发布时间:2020-12-15 08:25:08 所属栏目:百科 来源:网络整理
导读:我有一个快速的小应用程序,并想尝试使用TDD开发.我从未使用过TDD,甚至在我找到ASP.NET-MVC之前甚至都不知道它是什么. (我的第一个MVC应用程序进行了单元测试,但它们很脆弱,方式耦合,保留太多,并且被放弃了 – 我来学习单元测试!= TDD). 应用背景: 我有一个
我有一个快速的小应用程序,并想尝试使用TDD开发.我从未使用过TDD,甚至在我找到ASP.NET-MVC之前甚至都不知道它是什么. (我的第一个MVC应用程序进行了单元测试,但它们很脆弱,方式耦合,保留太多,并且被放弃了 – 我来学习单元测试!= TDD).
应用背景: 我有一个以字符串形式读入的采购订单的文本转储.我需要解析文本并返回新的采购订单编号,新的行项目编号,旧的采购订单编号,旧的采购订单行号.很简单. 现在我只处理新的采购订单详细信息(数量/行),并有一个这样的模型: public class PurchaSEOrder { public string NewNumber {get; private set;} public string NewLine {get; private set;} new public PurchaSEOrder(string purchaSEOrderText) { NewNumber = GetNewNumber(purchaSEOrderText); NewLine = GetNewLine(purchaSEOrderText); } // ... definition of GetNewNumber / GetNewLine ... // both return null if they can't parse the text } 现在我想添加一个方法“IsValid”,只有当“NewNumber”和“NewLine”都是非空时才应该为真.所以我想测试它像: public void Purchase_Order_Is_Valid_When_New_Purchase_Order_Number_And_Line_Number_Are_Not_Null() { PurchaSEOrder order = new PurchaSEOrder() { NewNumber = "123456",NewLine = "001" }; Assert.IsTrue(order.IsValid); } 这很容易,但是允许公共setter和无参数构造函数似乎是一个糟糕的折衷方案.所以另一种方法是在构造函数中输入’purchaSEOrderText’值,但之后我也在测试’GetNewNumber’和’GetNewLine’的代码. 我有点难以理解如何将其作为一个可测试的类写入,同时试图将其锁定在对模型有意义的方面.这似乎是一个常见的问题,所以我想我只是错过了一个明显的概念. 解决方法
一种解决方案是不让构造函数完成工作:
public class PurchaSEOrder { public PurchaSEOrder(string newNumber,string newLine) { NewNumber = newNumber; NewLine = newLine; } // ... } 然后测试很简单且隔离 – 您不会同时测试GetNewNumber和GetNewLine. 为了帮助使用PurchaSEOrder,您可以创建一个将它组合在一起的工厂方法: public static PurchaSEOrder CreatePurchaSEOrder(string purchaSEOrderText) { return new PurchaSEOrder( GetNewNumber(purchaSEOrderText),GetNewLine(purchaSEOrderText)); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Cocos Creator 玩家输入事件(摘自官方文档)
- 将 Flex 3 的应用程序迁移到 Flex 4 — 第 1 部分:将 Flex
- c# – 多个独立注册和登录表单.NET Identity 2.0
- c# – 如何判断代码是否从Visual Studio / Cassini本地运行
- oracle 连接 异常 Acquisition Attempt Failed!!! Clearing
- ruby-on-rails – Rails 4强参数和嵌套形式
- 限制Sqlite DB中的记录数
- 使用WPF应用程序可以实现依赖注入吗?
- WebGIS--ArcGIS for Flex系列开发一:flash builder
- c# – 使用lock有什么含义(typeof(string))