c# - 单元测试序列化有什么意义吗?

标签 c# unit-testing serialization xml-serialization

我有一个类序列化了一组我想进行单元测试的对象(使用 XML 序列化)。

我的问题是感觉我将测试 XML 序列化的 .NET 实现,而不是任何有用的东西。我还有一个先有鸡还是先有蛋的小场景,为了测试 Reader,我需要 Writer 生成的文件来执行此操作。

我认为我最终要寻求反馈的问题(有 3 个,但它们都相关)是:

  1. 是否可以在不使用读取器的情况下测试写入器?
  2. 测试阅读器的最佳策略是什么(XML 文件?模拟记录/回放)?是不是您真正要做的只是测试已反序列化的对象的属性值?
  3. 测试作者的最佳策略是什么!

Xml 序列化的背景信息

我没有使用架构,因此所有 XML 元素和属性都与对象的属性相匹配。由于没有架构,与每个对象的属性中发现的标签/属性不匹配的标签/属性将被 XmlSerializer 简单地忽略(因此属性的值为 null 或默认值)。这是一个例子

<MyObject Height="300">
    <Name>Bob</Name>
    <Age>20</Age>
<MyObject>

将映射到

public class MyObject
{
  public string Name { get;set; }
  public int Age { get;set; }

  [XmlAttribute]
  public int Height { get;set; }
}

反之亦然。如果对象更改为以下内容,XML 仍会成功反序列化,但 FirstName 将为空。

public class MyObject
{
  public string FirstName { get;set; }
  public int Age { get;set; }

  [XmlAttribute]
  public int Height { get;set; }
}

无效的 XML 文件会正确反序列化,因此单元测试会通过,除非您对 MyObject 的值运行断言。

最佳答案

你需要能够做到向后兼容吗?如果是这样,可能值得对旧版本生成的文件进行单元测试,这些文件应该仍然能够被新版本反序列化。

除此之外,如果您曾经介绍过任何“有趣”的东西,它可能值得进行单元测试来检查您是否可以序列化和反序列化,只是为了确保您没有用只读属性等

关于c# - 单元测试序列化有什么意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1102614/

相关文章:

c# - 按工作日而不是字母顺序合并排序星期几

c# - 在 ASP.net C# Web 表单 Web 应用程序中自动访问和关闭数据库

c# - 如何在没有第三方软件的情况下使用批处理文件检查远程服务器上的端口是否打开?

Python 单元测试的微妙错误

java - Gson:使用不带注释的方式排除特定类上的字段 - 2

c# - 如何在Mono/MonoDevelop中使用System.Windows?

ios - GHUnit - 终端 - "BAD CPU type in executable"

c# - 如何使用依赖注入(inject)模拟通用工厂

.net - 移动类时保持 .NET 序列化数据兼容性

python - 将货币金额四舍五入为传统上用于货币的小数位数