我正在创建一个对象序列化单元测试,并希望在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放入代码中吗?
发布于 2014-03-04 00:23:27
正如@leon的评论所建议的那样,使用一个资源文件,但我更进一步。
现在将您的测试数据称为
string data = Resources.TestData;
发布于 2014-03-04 00:27:51
可以使用linq到xml对象来创建xml表示,而不是xml字符串。第二个示例如下所示:
var xml =
new XElement("Something",
new XAttribute("Att", "s"),
new XAttribute("Att2", "gg"),
new XElement("AnotherSomething"),
new XElement("AnotherSomething"));
使用它的更多原因是:确保xml有效性、自动转义特殊字符、在转换为字符串时使用更多格式选项,以及--更容易处理。
发布于 2014-03-04 00:10:58
不,编译器/解析器不允许这样做。
您可以将所有xml放在一个文件中(以某种有效的结构),并让一个实用工具类加载整个文件,并在测试之间缓存它。
https://stackoverflow.com/questions/22166261
复制相似问题