“TestContext”不包含“DataRow”的定义

'TestContext' does not contain a definition for 'DataRow'

提问人:A G 提问时间:9/9/2018 最后编辑:IInspectableA G 更新时间:6/19/2022 访问量:5570

问:

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

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

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”的参数(您是否缺少使用 指令还是程序集引用?

我错过了什么吗?

C# 单元测试 UWP MSTest

评论

0赞 Muhammad Touseef 9/9/2018
请向我们展示“TestContext”类代码,以便我们了解您如何定义其“DataRow”成员
0赞 A G 9/9/2018
@touseefbsb我使用的是Microsoft.VisualStudio.TestTools.UnitTesting.TestContext类。根据 msdn.microsoft.com 它具有DataRow属性。我自己还没有定义它
0赞 Muhammad Touseef 9/9/2018
此类的 using 语句是否会导致任何错误?
0赞 A G 9/9/2018
@touseefbsb 否,没有其他错误。我可以毫无错误地使用此类的其他属性
0赞 Muhammad Touseef 9/10/2018
在这种情况下,我猜 intellisense 也没有显示 DataRow?

答:

-1赞 Muhammad Touseef 9/10/2018 #1

只需使用 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; }
}

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

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

评论

0赞 A G 9/10/2018
这导致了同样的错误。另外,根据 learn.microsoft.com 我必须这样命名:“public TestContext TestContex {”
0赞 Muhammad Touseef 9/10/2018
我认为这一定是文档中的错别字错误,因为这不是您命名属性的方式,我也在文档中的多个文本上下文用例中看到过,他们正在使用 textContextInstance,您是否尝试过使用它?奇怪的是,即使这样也不起作用,也许您正在使用没有 datarow 属性的较新版本的 TextContent 库。
1赞 A G 9/10/2018
我想我错过了一些东西,我以前从未使用DataSource属性创建过数据驱动测试,而且我可能没有注意到一些重要的东西。但是我仍然根据当前文档做了所有事情,无论如何使用 TestContext.DataRow 会导致错误(也重命名为 TestContextInstance)
5赞 rinomau 11/2/2018 #2

使用的是 .NET Core?

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

0赞 Shyam Patadia 6/15/2022 #3

我的剧本也和你的一样。只需将以下代码行放在项目的 .csproj 文件中,您就可以了:

<TargetFramework>net4.8</TargetFramework>

以前我使用的是net5.0,但是当我开始使用4.8时,我能够解决这个问题。我希望它有所帮助。干杯

如果您仍然无法获得它,请查看此存储库:https://github.com/manu1rock/RestSharpDemo

上面的 repo 会帮到你。