9

XLSX ファイルをロードする必要があるテスト プロジェクトがあります。そのために、copy-always を使用してファイルを追加し、それがビルド ディレクトリに配置されるようにしましたが、次のすべてが間違ったパスを返します。

  1. System.Reflection.Assembly.GetAssembly(typeof(testclass)).Location;
  2. AppDomain.CurrentDomain.BaseDirectory
  3. Directory.GetCurrentDirectory();

彼らはすべて私に与えます:

"C:\\Users\\username\\Documents\\visual-studio-projecten\\projectname\\TestResults\\username_ICT003 2012-06-20 12_07_06\\Out"

そして私は必要です

"C:\\Users\\username\\Documents\\visual-studio-projecten\\projectname\\TestProject\\bin\\Debug\\SupportFiles\\"

どうすればそれを達成できますか?

4

4 に答える 4

9

DeploymentItemAttribute属性を使用します。MSDN を引用するには:

この属性は、展開されたテストの実行に使用されるファイルを含むファイルとディレクトリを識別します。テスト エンジンは、展開項目のコピーを作成し、指定された OutputDirectory または既定のディレクトリに基づいてテスト展開ディレクトリに配置します。

例えば:

[TestClass]
public class MyUnitTest
{
    [TestMethod()]
    [DeploymentItem("myfile.txt")]
    public void MyTestMethod()
    {          
        string file = "myfile.txt";           
        Assert.IsTrue(File.Exists(file), "deployment failed: " + file +
            " did not get deployed");
    }
}

もちろん、テスト フレームワークとして MSTest を使用していると仮定します。

于 2012-06-20T10:22:46.147 に答える
7

これを試して:

string dir = Path.Combine(
    Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
    "SupportFiles");

使用しないDirectory.GetCurrentDirectory()でください。現在のディレクトリは exe ディレクトリではなく、プログラムの実行中に変更される可能性があります。

于 2012-06-20T10:18:55.477 に答える
1

私のような誰かがやってきた場合、.testsettings ファイルを使用していて、ファイルをコンテンツとして設定し、常にコピーするように設定しているにもかかわらず、クラスのDeploymentItem 属性が機能しない場合は、既に.testsettings ファイルの Deployment セクションを使用するか、.testsettings ファイルで DeploymentItem を使用する必要があります。これが私たちの今の様子です:

<Deployment>
    <DeploymentItem filename="Tests\Unit Tests\ConnectionStrings.config" />
    <DeploymentItem filename="Tests\Unit Tests\<project dir>\bin\Debug\TestFiles\" outputDirectory="TestFiles" />
</Deployment>

1 つはファイルを処理し、もう 1 つはディレクトリ内の 13 個のファイルを処理します。ディレクトリの「ファイル名」の末尾のスラッシュに注意してください。

解決策と詳細情報は次の場所にあります。

テスト設定の MsTest DeploymentItem OutputDirectory

于 2013-08-29T18:52:10.107 に答える