我需要对这个 GetData 方法进行单元测试。
public MessageResponse GetData(XmlElement requestElement)
{
MessageResponse MsgResponse = new MessageResponse();
if (requestElement.Attributes["employeeNo"] == null){
MsgResponse.Messages = new List<string>();
MsgResponse.Messages.Add("Attribute employeeNo is missing");
MsgResponse.Error = true;
return MsgResponse;
}
if (requestElement.Attributes["xmlEmployeeName"] == null){
MsgResponse.Messages.Add("Attribute xmlEmployeeName is missing");
MsgResponse.Error = true;
return MsgResponse;
}
return MsgResponse;
}
此方法需要一个 XmlElement 参数。我该如何嘲笑它?在我的代码中,我首先创建了一个 xmlDocument,然后加载 xml 文件。
XmlDocument doc = new XmlDocument();
doc.Load(xmlFilePath);
requestElement = doc.DocumentElement;
为了让我测试它,首先我需要创建一个没有employeeNo的xml文件,然后创建一个没有名字的xml文件,对于其他场景可能需要更多。看起来工作量很大。有更好的方法来测试吗?
我应该使用起订量或其他测试框架来简化测试吗?
您可以只创建要测试的元素,而根本不需要读取文件:
var doc = new XmlDocument();
doc.LoadXml("<MyTestElement/>");
var myTestElement = doc.DocumentElement;
myTestElement.Attributes["employeeNo"] = "fakeId";
var response = myTestResponder.GetData(myTestElement);
//assert whatever you need to
注意:每次您发现测试太难编写时,通常这意味着您的类/方法做了太多事情。
我假设您的方法验证输入,而不是使用提供的数据执行某些操作。我建议您抽象数据读取部分(使用一些 xml 反序列化器)来填充应用程序所需的数据模型。
然后对反序列化数据的结果运行验证。就像是:
public MessageResponse GetData(XmlElement requestElement)
{
var data = _xmlDeserializer.Deserialize(requestElement);
var validationResult = _validator.Validate(data);
if (validationResult.Errors.Count > 0)
{
//populate errors
return result;
}
_dataProcessor.DoSomethingWithData(data);
}
看一眼流利验证 http://fluentvalidation.codeplex.com/一个不错的验证库。
如果你走上面的路线,那么你的测试会简单得多。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)