2012-04-20 1 views
1

xmlファイルへのパスの文字列を取り、オブジェクトを出力するクラスがあります。私はいくつかの事前生成されたテストスクリプトでNUnitを使ってクラスをテストしたいと思います。C#ユニットテスト、zipファイルからXMLを使用する

私はスクリプトを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、スクリプトとスクリプトそのものをパッケージ化し、おそらくビルドシステム - あなたは3無関係なコンポーネントをテストしています。通常、ScriptParserのテストを呼び出します。単体テストを実行しますが、スコープ統合テストのスクリプトは... –

+0

@AlexeiLevenkov:私が見る限り、OPは 'ScriptParser.Parse'だけをテストしています。リソースからテスト・データをロードすること以外には、他の "コンポーネント"は含まれていません(コンポーネントではありません)。このテストで何の問題もない(おそらく 'foreach'を除いて、しかし私は判断する人ではない)。 –

+0

私は "プロジェクトの一部"を "製品のアセンブリ/ファイルに含まれています"と誤解していると思います... "テスト用のスクリプトファイルのZipアーカイブ"と読んでください。 –

答えて

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

関連する問題