gpt4 book ai didi

unit-testing - 你如何模拟 xml 进行单元测试?

转载 作者:行者123 更新时间:2023-12-04 05:23:01 26 4
gpt4 key购买 nike

我需要对这个 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 参数。我怎么 mock 它?在我的代码中,我首先创建了一个 xmlDocument,然后加载了 xml 文件。
            XmlDocument doc = new XmlDocument();
doc.Load(xmlFilePath);
requestElement = doc.DocumentElement;

为了我测试它,首先我需要创建一个没有employeeNo的xml文件,创建另一个没有名字的文件,对于其他场景可能更多。这似乎是很多工作。有没有更好的方法来测试它?

我应该使用 moq 或其他测试框架来简化测试吗?

最佳答案

您可以只创建要测试的元素,而无需读取文件:

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);
}

看看 FluentValidation一个不错的验证库。

如果你走上面的路线,那么你的测试会简单得多。

关于unit-testing - 你如何模拟 xml 进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19733088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com