【问题标题】:'TestContext' does not contain a definition for 'DataRow'“TestContext”不包含“DataRow”的定义
【发布时间】:2019-02-14 04:17:35
【问题描述】:

我有 UWP 项目。使用 VS Community 2017 我在我的解决方案中添加了一个单元测试(添加项目-> Windows 通用-> 单元测试应用程序(Windows 通用)),

我添加了对我的项目的引用, 我添加了带有测试数据的 .csv 文件, 我添加了数据源属性

using System; 
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTestProject1
{
 [TestClass]
 public class UnitTest1
 {
  private TestContext testContextInstance;
  public TestContext TestContext
  {
   get { return testContextInstance; }
   set { testContextInstance = value; }
  }

  [TestMethod()]
  [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", 
  @".\TestData.csv", "TestData#csv", DataAccessMethod.Sequential)]

  public void ParameterizedTest()
  {  
   int value = Convert.ToInt32(TestContext.DataRow["Row1"]); 

但我仍然无法使用 TestContext.DataRow

错误 CS1061“TestContext”不包含“DataRow”的定义 并且没有可访问的扩展方法“DataRow”接受第一个 可以找到“TestContext”类型的参数(您是否缺少使用 指令还是程序集引用?)

我错过了什么吗?

【问题讨论】:

  • 请向我们展示“TestContext”类代码,以便我们了解您是如何定义其“DataRow”成员的
  • @touseefbsb 我正在使用 Microsoft.VisualStudio.TestTools.UnitTesting.TestContext 类。根据msdn.microsoft.com,它具有 DataRow 属性。不是我自己定义的
  • 这个类的 using 语句是否导致任何错误?
  • @touseefbsb 不,没有其他错误。我可以毫无错误地使用此类的其他属性
  • 在这种情况下,我猜智能感知也没有显示 DataRow?

标签: c# unit-testing uwp mstest


【解决方案1】:

您使用的是 .NET Core 吗?

适配器的 .Net Core 版本尚不支持此处指定的 DataSource https://github.com/Microsoft/testfx/issues/233

【讨论】:

    【解决方案2】:

    只需使用 testContextInstance.DataRow["Row1"] 并可选地在其末尾添加 toString 就像这样 testContextInstance.DataRow["Row1"].ToString( )

    您犯了一个常见错误,即您尝试使用 TextContext.DataRow 其中 TextContext 是一个没有名为 DataRow的静态属性的类> 所以为了使用它,你需要创建一个你已经调用过的类的实例 testContextInstance

    还将属性名称从 TextContent 更改为 TextContextInstance,如下所示

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

    因为在进行此更改时,您永远不应将属性命名为与其类型 (class) 完全相同,现在您甚至可以像之前尝试的那样直接使用该属性。

    int value = Convert.ToInt32(TestContextInstance.DataRow["Row1"]); 
    

    【讨论】:

    • 导致了同样的错误。同样根据docs.microsoft.com,我必须这样命名:“public TestContext TestContex {”
    • 我认为这一定是文档中的拼写错误,因为这不是您命名属性的方式,我也在文档中多个文本上下文用例的地方看到过,他们使用的是 textContextInstance,有你试过用它代替吗?奇怪的是,即使这样也不起作用,也许您使用的是没有 datarow 属性的较新版本的 TextContent 库。
    • 我想我错过了一些东西,我以前从未使用 DataSource 属性创建过数据驱动测试,而且我可能没有注意到一些重要的东西。但是我仍然根据当前文档做了所有事情,无论如何使用 TestContext.DataRow 会导致错误(也重命名为 TestContextInstance)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多