"TestContext"没有包含"DataRow"的定义。

4

我有一个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' 的第一个参数 (是否缺少 using 指令或程序集引用?)

我错过了什么吗?


请展示“TestContext”类的代码,以便我们可以看到您如何定义其“DataRow”成员。 - Muhammad Touseef
@touseefbsb 我正在使用 Microsoft.VisualStudio.TestTools.UnitTesting.TestContext 类。根据 msdn.microsoft.com 上的说明,它具有 DataRow 属性。我没有自己定义它。 - A G
这个类的 using 语句是否引起了任何错误? - Muhammad Touseef
在这种情况下,我猜Intellisense也没有显示DataRow? - Muhammad Touseef
@touseefbsb 是的,Intellisense也没有显示DataRow,但显示其他属性。 - A G
显示剩余4条评论
3个回答

5

0

我的脚本和你的一样。只需将以下代码行放入您项目的.csproj文件中,您就可以正常运行:

<TargetFramework>net4.8</TargetFramework>

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

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

上述存储库将对您有所帮助。


-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"]); 

导致相同错误的原因。此外,根据learn.microsoft.com的说法,我必须这样命名它:“public TestContext TestContex {”。 - A G
我认为文档中一定有笔误,因为那不是属性的命名方式。此外,在文档的多个地方,我看到了textContext的用例,它们在使用textContextInstance,你尝试过使用它吗?奇怪的是,即使这样也不起作用,也许你正在使用一个新版本的TextContent库,其中没有datarow属性。 - Muhammad Touseef
1
我觉得我可能漏掉了什么,因为我以前从未使用过DataSource属性创建数据驱动测试,可能没有注意到重要的事情。但是,我仍然按照当前文档的说明进行了一切操作,但是使用TestContext.DataRow仍然会导致错误(也尝试将其重命名为TestContextInstance)。 - A G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接