1

xmlファイルへのパスの文字列を受け取り、オブジェクトを出力するクラスがあります。事前に生成されたテストスクリプトを使用してNUnitを使用してクラスをテストしたいと思います。

スクリプトは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形式でプロジェクトの一部であるスクリプトにアクセスする方法です。

ありがとう!

編集:コメントの一部に対処するために、zipファイルはユニットテストプロジェクトの一部であり、リリースされたコードベースではありません。これには、テスト可能な既知の出力を生成するテストスクリプトが含まれています。スクリプトがかなり大きいため(各100MB)、圧縮されています

4

2 に答える 2

3

このzipファイルをリソース(プロジェクトのプロパティ/リソース/リソースの追加/既存のファイルの追加)に追加し、SharpZipLibを使用してzipから抽出します。たとえば、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

于 2012-04-20T21:39:55.497 に答える
1

C#には、zipファイルを管理する方法がネイティブにありません。ただし、J#は使用できます。

http://msdn.microsoft.com/en-us/magazine/cc164129.aspx

または、コマンドラインから一時ディレクトリに解凍することを検討してください。

コマンドラインを使用してファイルを解凍するにはどうすればよいですか?

于 2012-04-20T21:39:05.883 に答える