2012-04-20 72 views
1

我有一个类需要一个字符串的XML文件的路径,并输出一个对象。我想用一些预先生成的测试脚本使用NUnit来测试这个类。C#单元测试,使用XML从一个zip文件

我有一个zip文件并包含在项目中的脚本。我想这样做:

// Not sure how to do this 
List<byte[]> scripts = GetTheScriptsSomehow(); 

foreach(var script in scripts) 
{ 
    var parsedScript = ScriptParser.Parse(script); 
    Assert.AreEqual(parsedScript.Blah, "BLAH"); 
} 

我最关心的部分是如何访问压缩的脚本和部分项目。

谢谢!

编辑:为了解决一些评论,zip文件是单元测试项目的一部分,而不是发布的代码库。它包含应该产生可测试的已知输出的测试脚本。他们被压缩,因为脚本相当大(每个100MB)

+0

注意,那感觉就像单元测试的不寻常的定义 - 您正在测试三个不相关的组件 - ScriptParser,可能是打包脚本和脚本本身的构建系统。通常你会为ScriptParser.Parse测试一个单元测试,但是你的范围集成测试的脚本... – 2012-04-20 21:41:42

+0

@AlexeiLevenkov:据我所知,OP只测试'ScriptParser.Parse'。除了从资源加载测试数据(不会将其称为组件)之外,没有其他“组件”涉及。这个测试没什么不妥(除了'foreach'外,可能我不是那个人)。 – 2012-04-20 21:46:47

+0

我猜我错误地将“项目的一部分”误解为“包含在产品的程序集/文件中”......您可能是正确的,因为它应该被解读为“严格用于测试的脚本文件Zip存档”。 – 2012-04-20 21:52:12

回答

3

添加在资源这个zip文件(项目属性/资源/添加资源/添加现有的文件),并使用SharpZipLib从ZIP解压,让我们说,你的压缩文件

scripts.zip

代码在字符串中提取脚本:

ZipInputStream zip = new ZipInputStream(new MemoryStream(Properties.Resources.scripts)); 
while (zip.GetNextEntry() != null) 
{ 
    MemoryStream data = new MemoryStream(); 
    zip.CopyTo(data); 
    data.Position = 0; 
    string scriptContents = new StreamReader(data).ReadToEnd(); 
    /// do something with scriptContents variable 
} 

这里有SharpZipLib一些用法示例:

http://wiki.sharpdevelop.net/SharpZipLib-Zip-Samples.ashx

+0

完美,谢谢! – ConditionRacer 2012-04-21 23:29:31