Visual Studio 2010、x64マシン、組み込みのWebサーバーを使用して、組み込みのテストフレームワークを使用する単体テストのセットでWCFサービスをホストします。
テストを実行するためにロードする必要のあるXMLファイルがあります。このファイルをテストプロジェクトに含め、「content」と「always copy to output directory」に設定したファイルを用意しました。このファイルはbin\debugディレクトリに正常にコピーされます。
しかし、テストを実行すると、xmlファイルがありません。プロジェクトのbin\debugフォルダーではなく、テストの作業ディレクトリC:\ Projects\SAP Reapprovals\TestResults\name_machine 2010-12-06 13_45_43\Out "で検索されます。ファイルはそこにコピーされていません。
このファイルを強制的にコピーする方法はありますか、またはテスト内から参照を完全に修飾する必要がありますか?
TIA!
ジェームズ
更新DeploymentItem
属性を設定しましたが、ファイルがまだコピーされません。しかし、それは確かに私が望むもののように見えます...なぜそれがうまくいかないのですか?
私のテストコード:
[TestMethod]
[DeploymentItem("SAP - GS3 format.xml")]
public void TestProcessSapRoles() {
// I get a 'file not found' error here, and when
// I check the output directory, it isn't there
XElement rolesRoot = XElement.Load("SAP - GS3 format.xml");
}
回答:
CPedrosに感謝します。彼の助けを借りて、これを少し拡大しました。 SysInternalsのProcess Monitorを実行して、xmlファイルを探している場所を確認しました。これが私が見つけたものです:
Ctrl + r、ctrl + t(現在のコンテキストでのデバッグテスト)を使用してテストを実行すると、 ビジュアルスタジオ無視されたのDeploymentItem
完全に属性 そしてもしませんでした 試す ファイルをどこかにコピーします。この場合、読み取り用に開こうとしたときに「ファイルが見つかりません」という例外が発生しました。 Visual Studioはテスト用の一時作業ディレクトリを作成しましたが、そこにはAgentRestart.datという1つのファイルしかありませんでした。
ツールバーの[ユニットテストの実行]ボタンを使用してテストを実行すると(どのテストオプションかはわかりません)、Visual Studioはファイルをコピーせず、プロジェクトディレクトリから直接参照しました。テストに合格し、一時的な作業ディレクトリは作成されませんでした。
メニューオプションの[実行->現在のコンテキストでテスト](デバッグではなく実行)からテストを実行すると、一時作業ディレクトリが作成され、xmlファイルとすべての実行可能ファイルがそこにコピーされました。テストに合格しました。
Local.testsettings(testsフォルダーの下のSolution Itemsフォルダーの下)を編集したとき、左側のメニューから[Deployment]を選択し、xmlファイルを追加しました。 [ソリューションディレクトリ]\[プロジェクトディレクトリ]\file.xmlとして追加されました。 DeploymentItem
属性を削除しました。これで、テストをデバッグすることができました。 xmlファイルとすべての実行可能ファイルは、テスト用に作成された一時ディレクトリにコピーされました。
TLDR: Visual Studioは、テストを実行する特定の方法でDeploymentItem
属性を無視しています。解決策は、Local.testsettings
、Deployment
メニューを編集し、ファイルを手動で追加することです。
助けてくれてありがとう!これを解決するのに最も役立つので、彼の答えはCPedrosに感謝しています。
DeploymentItem属性を使用してテストに注釈を付けてみてください: http://msdn.Microsoft.com/en-us/library/Microsoft.visualstudio.testtools.unittesting.deploymentitemattribute(v = VS.100).aspx
ドキュメントのコードスニペットは次のとおりです。
[TestClass]
public class UnitTest1
{
[TestMethod()]
[DeploymentItem("testFile1.txt")]
public void ConstructorTest()
{
// Create the file to deploy
Car.CarInfo();
string file = "testFile1.txt";
// Check if the created file exists in the deployment directory
Assert.IsTrue(File.Exists(file), "deployment failed: " + file +
" did not get deployed");
}
}
Local.testSettingsにファイル名を入力してプロパティを「常にコピーする」に設定しても、ファイルの1つがoutフォルダーにコピーされないという問題に直面していました。
次の手順で問題が解決しました:
これが誰かを助けることを願っています。
私はしばらくの間、デプロイメント属性に取り組んできましたが、ついに諦めました。代わりに、ファイルを手動でテストディレクトリにコピーし、終了したら削除します。
テストファイルの場所:
Private _locationOfTestFilesToBeCopied As String = "C:\...\TestFilesToBeCopied"
Private _locationOfTestFiles As String = "C:\...\TestFiles"
メソッドの初期化:
<TestInitialize()>
Public Sub Setup()
DeleteCopiedTestFiles()
CopyTestFilesToTestDirectory()
End Sub
メソッドのコピーと削除:
Private Sub CopyTestFilesToTestDirectory()
Dim sourceDirectory As New DirectoryInfo(_locationOfTestFilesToBeCopied)
For Each fileInfo As FileInfo In sourceDirectory.GetFiles
fileInfo.CopyTo(_locationOfTestFiles & "\" & fileInfo.Name, True)
Next
sourceDirectory = Nothing
End Sub
Private Sub DeleteCopiedTestFiles()
Dim sourceDirectory As New DirectoryInfo(_locationOfTestFiles)
For Each fileInfo As FileInfo In sourceDirectory.GetFiles
fileInfo.Delete()
Next
sourceDirectory = Nothing
End Sub
私はこれがうまくいくことを発見しました
xmlファイルを必要とするテストでこの属性を使用することを検討してください。