14

以下にリンクされている質問と基本的に同じ問題が発生していますが、機能させることができないようです。「System.Data.DataRow型の式にインデックス付け[]を適用できません」というメッセージが表示されます。私の知る限り、私はソリューションを正しく実装しました。

MSTestでのデータ駆動型テストの問題

[TestClass]
public class UnitTest1
{
    private TestContext testContextInstance;

    public TestContext TestContext
    {
        get
        {
            return testContextInstance;
        }
        set
        {
            testContextInstance = value;
        }
    }        

    private ServiceReference1.ProductCatalogClient client = new ServiceReference1.ProductCatalogClient("BasicHttpBinding_IProductCatalog");

    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\CountList.csv", "CountList#csv", DataAccessMethod.Sequential), DeploymentItem("..\\ServiceTest\\CountList.csv"), TestMethod]
    public void AreCountsCorrect()
    {
        int id = TestContext.DataRow["Id"] as int;
        int count = client.GetProductCount(id);
        Assert.IsTrue(count == TestContext.DataRow["Count"] as int);
    }
}
4

5 に答える 5

17

System.Dataテストプロジェクトへの参照を追加します。DataRowはデータ駆動型テストに使用されるため、なぜそれが自動的に含まれないのかわかりません。

于 2011-01-25T03:50:26.263 に答える
5

この問題を修正するには、テストプロジェクトに参照を追加する必要があります。VS2013が自動的に追加しない理由がわかりません。

テストプロジェクトを右クリックし、[追加]->[参照...]->[アセンブリ]->[フレームワーク]->[System.Data]をクリックして、確認します。

終わり!

ここに画像の説明を入力してください

于 2014-10-14T04:53:37.837 に答える
1

this.TestContext.DataRow ["PathFile_Original"]であなたと同じ問題が発生しました。間違っていたのは非常に単純で、System.Dataへの参照を追加しませんでした。それだけでした。

修正は非常に簡単です。ライブラリがすでにあることを確認してください。

乾杯

于 2014-06-23T18:03:50.273 に答える
1

他の人が言っているように、問題を修正するにSystem.Dataは、プロジェクトにへの参照を追加する必要があります。

その参照を追加した後も問題が解決しない場合は、Visual Studioを再起動し、冗長な参照またはusingヘッダーを削除する必要があります。

于 2015-10-12T17:08:56.493 に答える
0

これは私と一緒に働いています

[TestMethod]
    [TestCategory("Category 4")]
    [DataSource("MyExcelDataSource")]
    [DeploymentItem("UnitTestProject\\DBConnections.xlsx")]
    public void testwithexceldata()
    {
        //http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.testcontext.datarow.aspx

        int x = TestContext.DataRow.Table.Rows.Count;
        int Balance = Convert.ToInt32(TestContext.DataRow["Balance"]);
        int Amount = Convert.ToInt32(TestContext.DataRow["Amount"]);
        Assert.AreEqual(Balance, Amount);

}

于 2013-11-17T10:56:52.630 に答える