如何模拟 xml 进行单元测试?

2024-04-04

我需要对这个 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(使用前将#替换为@)

如何模拟 xml 进行单元测试? 的相关文章

随机推荐

  • 重命名实体框架 T4 模板生成的类名称?

    我有一个包含大量表的数据库 不幸的是这些表的命名没有任何标准约定 表名 另一个表名 还有另一个表名 垃圾表 我使用实体框架和标准 T4 代码生成模板在 C 中创建 POCO 类 是否有我可以遵循的最佳实践 让我可以合并自己的约定 在 C 应
  • Excel - VLOOKUP 与 INDEX/MATCH - 哪个更好?

    我了解如何使用每种方法 VLOOKUP or HLOOKUP vs INDEX MATCH 我寻找它们之间的差异不是出于个人喜好 而是主要在以下方面 是否有一种方法可以做到而另一种方法不能做到的事情 一般来说 哪一种更有效 或者取决于具体情
  • 如何导入具有正确类型的 Vue 类组件?

    例如 如果我有一个单文件 Vue 类组件 MyComponent vue
  • 在 jQuery .serialize() 中包含空值字段

    我正在尝试通过 jQuery post 提交表单并通过序列化表单数据 form serialize 不幸的是未选中的字段单选按钮 or 复选框没有被序列化 因此已提交 有没有办法包含所有字段 无论它们是否包含值 我想这只会影响这样的字段
  • 使用seaborn和pandas绘图防止重叠条

    我正在尝试使用 pandas 绘图来创建带有 seaborn 导入的堆叠水平条形图 我想删除条之间的空间 但也不让条重叠 这是我尝试过的 import pandas as pd import numpy as pd import seabo
  • HDF5 - 并发、压缩和 I/O 性能 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我对 HDF5 性能和并发性有以下疑问 HDF5 支持并发写访问吗 撇开并发因素不谈 HDF5 的性能如何 输入 输出性能 does 压缩率影响性能
  • 适用于 IOS/Android 应用程序的谷歌云存储下载

    有没有一种方法可以将单个大文件作为多线程下载 并在从谷歌云存储下载后合并所有文件 是的 从 Google Cloud 存储下载对象时 您可以指定要检索的字节范围 使用 XML API 这将通过 Range 标头进行处理 这对于恢复中断的下载
  • 正则表达式如何验证字母之间的下划线

    我如何允许任何单词字符和下划线之间应该有一个字母和一个数字 示例 ab2 sb s s 但它不应该允许 sdc 或 s2 这是我的代码 a zA Z0 9 6 255 我在 javascript 上使用正则表达式 您需要将字符长度检查与模式
  • MVC 的替代方案 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 模型视图控制器的替代 设计方法 有哪些 MVC 似乎很流行 SO 是用它构建的 我知道很多 但它是唯一使用的方法吗 关于几种不同的交互
  • 错误:mysqlnd 无法使用旧的不安全身份验证连接到 MySQL 4.1+

    我收到以下错误 数据库连接失败 mysqlnd 无法使用旧的不安全身份验证连接到 MySQL 4 1 请使用管理工具通过以下命令重置您的密码SET PASSWORD PASSWORD your existing password 这将存储一
  • C# 项目在 Visual Studio 中重建的原因

    我有一个包含约 320 个项目的大型解决方案 即使对单个 Web 表单进行很小的更改 也会导致测试 调试小更改所需的构建时间很长 我怀疑构建后文件复制任务会 触及 文件日期时间并导致多次重建 在没有任何强大的命名和版本控制影响的情况下 除了
  • 如何定义输出类型取决于输入类型的函数

    给定以下课程 case class AddRequest x Int y Int case class AddResponse sum Int case class ToUppercaseRequest str String case cl
  • 在 x86-64 asm 中:如果源操作数是两个立即值,是否有办法优化两个相邻的 32 位存储/写入内存?

    有没有一个好的方法来优化这段代码 x86 64 mov dword ptr rsp 0 mov dword ptr rsp 4 0 其中立即值可以是任何值 不一定为零 但在这种情况下始终是立即常量 原双店还慢吗 硬件中的写组合和 op 的并
  • Swift4:“MessageKind”没有成员“url”

    下面是 MessageKit 库的示例代码 目前 其行为是所有图像消息必须在显示给最终用户之前完全加载 因此需要花费大量时间等待 我想要的是在加载所有消息后加载图像 看 1 你会看到 kind 变量将是一个 mediaItem 看2 你会看
  • ENOENT:没有这样的文件或目录 - pug 中出现错误

    当上传到 Heroku 时 它会抛出此错误 而在本地主机上运行时不会出现错误 Here is browser message 这是我的display pug extends LoginLayout LoginLayout pug block
  • 计算沿 y 轴方向(角度测量)的变化率?

    我想计算 iPhone 沿 y 轴方向的变化率 1 最初我需要将参考定义为y轴 2 然后测量相对于定义参考的方向变化率 角度测量 CMAttitude 是否提供可靠的角度测量来实现此目的 或者我可以使用旋转矩阵或积分陀螺仪数据 我实现了这种
  • 如何在顶部显示中线

    我有一个正在运行的方便脚本ab然后生成情节 然而有一个问题 它向我显示了每一点 这很好 但是我还想看到它们之间的平均 线 我会在图中展示更多 那么有没有办法在上面添加中 中游侠呢 Script usr local bin gnuplot s
  • 如何存储位置敏感的哈希值?

    我已经有了生成局部敏感哈希的算法 但是我应该如何对它们进行存储以利用它们的特性 即相似的元素具有接近的哈希 具有汉明距离 在 matlab 代码中 我发现他们只是在要搜索的点的哈希值和数据库中的点的哈希值之间创建一个距离矩阵 以简化代码 同
  • Pyspark 出现 TypeError:无法 pickle _abc_data 对象

    我正在尝试使用 pyspark 从 pickled 模型生成预测 我使用以下命令获取模型 model deserialize python object filename with deserialize python object fil
  • 如何模拟 xml 进行单元测试?

    我需要对这个 GetData 方法进行单元测试 public MessageResponse GetData XmlElement requestElement MessageResponse MsgResponse new Message