2013-07-05 16 views
8

私はコンソールアプリケーションとユニットテストを持つソリューションを持っています。ユニットテストプロジェクトでの相対パスc#

var target = new Validator(); 
var targetFile = @"C:\Folder\SubFolder\AnotherSubFolder\Development\DEV\src\UnitTest\TargetFolder\file.xml"; 

bool actual = target.Validate(targetFile); 
Assert.AreEqual(true, actual); 

Validatorはコンソールアプリケーションプロジェクトにあり、file.xmlはユニットテストプロジェクト内のフォルダにあります。

このユニットテストは合格ですが、私はこれを自分のtfsやビルドサーバにチェックインすると、targetFileを見つけることができます。

ターゲットファイルのパスを変更する方法を教えてください。

ありがとうございます!

+0

どのようなユニットテストフレームワークを使用していますか? –

+0

フレームワーク?それは4.0 – Gerald

答えて

0

Validatorの位置は関係ありません。相対パスは、テストアプリケーションが実行されているディレクトリからの相対パスである必要があります。targetFileはそこからの相対パスに設定してください。 次に、あなたのテストが、あなたのdevマシンと同じ相対位置から実行されていることを確認してください。

ボーナスヒント:あなたは以下のようなフォルダを参照することができAssert.IsTrue(actual);

5

使用しています。私が正しくあなたの問題を理解している場合

"..\..\TargetFolder\file.xml" 
7

は、(コンソールアプリケーション)の製品コードは、テストプロジェクト内の項目に依存することは良くないですので、私は製品コードプロジェクトにfile.xmlを移動することをお勧めいたします。あなたのパスの問題を解決するために

、私は最善のアプローチは、あなたがVS [プロパティ]ウィンドウで見つけることができ、新しい場合は常にコピーとして出力ディレクトリにコピーをプロパティをコピーを使用することだと思います。

次の手順を確認してください。

  1. 製品プロジェクト(例:データフォルダ)にfile.xmlを入れる必要がある場合は、フォルダを作成します。
  2. file.xmlをフォルダに入れます。
  3. file.xmlの[VSプロパティ]ウィンドウに移動します。
  4. 設定ビルドアクションコピーに出力ディレクトリにコピーなしへと常にまたはコピー新しい場合。
  5. ビルドしてこの場合

    Assert.IsTrue(File.Exists(@"Data\file.xml")); 
    

    としてユニットテストを行い、VSは自動的にテストpojectの出力フォルダの下にfile.xmlでデータフォルダを作成します。

+0

ですこれは私が現在やっていることです。ただし、ターゲットファイルのパスを相対パスに変更する方法がわからないので、ビルドサーバーに問題がないことを確認できます。 – Gerald

+1

重要なことは、テストプロジェクトで現在の場所をキャッチすることだと思います。通常、正しい位置はテストプロジェクトの出力フォルダ(bin \ debug)と同じです。テストフレームワークによると、出力フォルダは、シャドウコピーと呼ばれる別の場所にコピーされる可能性があります。しかし、この場合、相対パスが壊れないので問題はありません。 –

+0

ジンウクありがとう!非常に役立ちます。 – Gerald

2

私は私の問題を解決しました。私はこれを使用した:

"..\..\..\TestFileFolder\myFile.xml"