我正在创建一个对象序列化单元测试,并希望在c#代码单元测试文件中内联对象的XML。 我知道最简单的内联方法是使用@前缀作为字符串:
var xml = @"<Something>
<AnotherSomething/>
<AnotherSomething/>
</Something>";
我的问题是我的XML包含属性并且它非常大,为了内联它我将需要遍历所有XML并为XML中的每个“”“放置转义,这样做非常大XML节点很难并且维护它很难 -
var xml = @"<Something Att=""s"" Att2=""gg"">
<AnotherSomething/>
<AnotherSomething/>
</Something>";
我不想将XML作为另一个文件并将其标记为部署项 -
[DeploymentItem("Something.xml")]
因为它需要单元测试从磁盘加载文件,这将使单元测试慢得多,而且我可能有很多这样的。
有没有其他方法可以将XML放在代码中而不进行修改?
答案 0 :(得分:4)
正如@ leon的评论建议使用资源文件,但我更进一步。
现在将您的测试数据称为
string data = Resources.TestData;
答案 1 :(得分:0)
不,编译器/解析器不允许它。
您可以将所有xml放在一个文件中(在某种有效的结构中)并让实用程序类加载整个文件并在测试之间缓存它。
答案 2 :(得分:0)
您可以使用linq to xml对象创建xml表示,而不是xml字符串。第二个例子看起来像这样:
var xml =
new XElement("Something",
new XAttribute("Att", "s"),
new XAttribute("Att2", "gg"),
new XElement("AnotherSomething"),
new XElement("AnotherSomething"));
使用此功能的更多理由是确保xml有效性,自动转义特殊字符,转换为字符串时的更多格式选项,以及 - 更容易处理。