
应用背景:
我有一个以字符串形式读入的采购订单的文本转储.我需要解析文本并返回新的采购订单编号,新的行项目编号,旧的采购订单编号,旧的采购订单行号.很简单.
现在我只处理新的采购订单详细信息(数量/行),并有一个这样的模型:
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));} 总结 以上是内存溢出为你收集整理的c# – TDD:帮助编写Testable类全部内容,希望文章能够帮你解决c# – TDD:帮助编写Testable类所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)