3

Visual Studio のデータ ドリブン テストの使用に問題があります。これを最も単純な例に分解しようとしました。Visual Studio 2012 を使用しています。新しい単体テスト プロジェクトを作成します。システムデータを参照しています。

私のコードは次のようになります。

namespace UnitTestProject1 
{
    [TestClass]
    public class UnitTest1 
    {
        [DeploymentItem(@"OrderService.csv")]
        [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "OrderService.csv", "OrderService#csv", DataAccessMethod.Sequential)]
        [TestMethod]
        public void TestMethod1() 
        {
            try 
            {
                Debug.WriteLine(TestContext.DataRow["ID"]);    
            } 
            catch (Exception ex) 
            {
                Assert.Fail();
            }
        }

        public TestContext TestContext { get; set; }
    }
}

Build Options を 'Content' と 'Copy Always' に設定した非常に小さな csv ファイルがあります。ソリューションにファイルを追加し、.testsettings展開を有効に設定し、csv ファイルを追加しました。

|DataDirectory|を使用して、または使用せずに、フルパスを指定して/指定せずにこれを試しました(Environment.CurrentDirectoryで取得したのと同じパス)。念のため、「../」と「../../」のバリエーションを試しました。現在、csv はプロジェクトのルート レベルにあり、.cs テスト コード ファイルと同じです。

xml と csv のバリエーションを試しました。

TestContext は null ではありませんが、DataRow は常に null です。

いろいろいじっても、これが機能しませんでした。何が間違っているのかわかりません。

mstest は、csv ファイルの検索に失敗したかどうか、または DataRow のデータの取り込みに失敗した原因として考えられる特定のエラーを教えてくれるログをどこかに作成しますか?

次のcsvファイルを試しました:

ID

1

2

3

4

ID、なんでも

1,0

2,1

3,2

4,3

これまでのところ、サイコロはありません。

ReSharper を使用していますが、何らかの方法で干渉している可能性はありますか?

更新しまし た。現在、ほとんどが機能しています。XML は使用できますが、CSV を使用すると、ID という名前の列が「ID」として返されます。

理由がわからない。もちろん、実際のファイルを確認しましたが、変な文字はありません。

同様の問題を抱えている人のために、より詳細なデバッグ情報を取得できるように、Just My Code をオフにし、Net Framework ソース ステップなどを有効にしました。これにより、ReSharper が問題を引き起こしていると判断できました。resharper を無効にして、属性を次のように変更しました。

[DeploymentItem("UnitTestProject1\\OrderService.csv")]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\bin\\Debug\\OrderService.csv", "OrderService#csv", DataAccessMethod.Sequential)]

そして、それは機能しました(注記を除く)。私はまだ自分のパスに「bin\debug」があるのではないかと疑っていますが、DataRow が null ではなくなったことに満足しています。ありがとう!

何か案は?

4

3 に答える 3

2

今日、データ駆動型テストを CSV 入力ファイルで動作させようとしたときに、同様の問題に苦しんでいました。最初の列の名前には、最初にゴミがありましIDID

エンコードの問題であることが判明しました。CSV ファイルは UTF-8 で保存されていたため、先頭にバイト オーダー マークが追加され、明らかにパーサーが混乱していました。ファイルを ANSI エンコーディングで保存すると、期待どおりに機能しました。

私はそれが古い質問であることを知っていますが、この情報は他の誰かがこのページにたどり着くのを助けるかもしれません.

于 2013-10-20T08:01:24.890 に答える
1

プロパティウィンドウから追加しようとしましたか?

  • [テスト] メニュー -> [ウィンドウ] -> [テスト ビュー] -> [テストが読み込まれます] に移動します。
  • テストをクリックして ie を変更し、TestMethod1F4 (プロパティ) を押します。
  • 「データ ソース」を探し、その横にある省略記号をクリックします。
  • ウィザードに従って、属性を適切に設定します。TestMethod

通常は大きな障害となる展開部分が適切に設定されています。

また、ビルド アクションを [常時コピー] に設定する必要はありません。これはデプロイによって行われるためです。このオプションは、構成に使用する .xml ファイルや、プロジェクトの一部としてアイコン/画像などのアイテムを含める場合に使用されます。

更新 1:

また、MSDN でこのチュートリアルを試してください。

更新 2:

ProcMon を含むこの投稿を試してください

于 2012-12-17T22:28:11.123 に答える
0

CSV自体をtestsettingsファイルに入れてみたとのことですが、ディレクトリだけ入れてみましたか?

<Deployment>
 <DeploymentItem filename="Test\Data\" />
</Deployment>

次に、DataSource 行は次のようになります。 [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\YOURCSV.csv", "YOURCSV#csv", DataAccessMethod.Sequential)]

このようにすれば、DeploymentItem 行を指定する必要はありません。

フォルダー構造は次のようになります: Trunk\Test\Test\Data

以下を含めます: デプロイメントの Test\Data

次に |DataDirectory|\ 経由で Test\Data にアクセスします。

すべての CSV は \Data フォルダー内にあります

于 2013-02-11T20:22:41.990 に答える