SQL Visual Studio 中的服务器单元测试:由于 "Object reference not set to an instance of an object." 错误,无法设置测试条件属性

SQL Server Unit Test in Visual Studio: Unable to set test condition properties due to "Object reference not set to an instance of an object." error

我一直在 Visual Studio 中为 SQL 服务器数据工具 (SSDT) 项目试验单元测试。我在单元测试设计器中发现了一个我不知道如何调试或解决的问题。

背景:

2019 年 Visual Studio 我创建了一个 SSDT 项目并通过导入数据库填充它。我发现创建能够进行 运行 SQL 服务器测试的单独单元测试项目的最简单方法是右键单击 SSDT 项目中的存储过程,然后 select 创建单元测试。 ., 然后 select 将单元测试添加到新项目的选项。

要向测试项目添加新的单元测试,我右键单击该项目,select 添加 > 新项目... > SQL 服务器 > Sql 服务器单元测试。

问题:

我试图将标量值测试条件添加到我的第一个 SQL 服务器单元测试中。当我尝试在属性 window 中设置预期值时,出现一个错误对话框,显示“属性 值无效”。详细消息是“对象引用未设置到对象的实例。”

我发现尝试在属性 window 中设置任何 属性 都会导致相同的错误。但是,没有迹象表明该对象是空的。

我已经能够通过在底层 C# class 中设置 属性 值而不是使用属性 window 来解决这个问题。如果我这样做,测试将成功运行。所以看来问题仅限于测试设计者。

问题不仅限于标量值测试条件。我 运行 也遇到了与行计数条件相同的问题 - 我无法在属性 window 中设置任何 属性 因为每当我执行错误对话框时都会阻止我更改值.

有没有人遇到过类似的问题并找到了解决方法?

原来问题是由两个项目文件中的 ToolsVersion 属性不匹配引起的:SSDT 项目和单元测试项目。

我从这个 MSDN 线程中得到 ToolsVersion 可能很重要的提示:https://social.msdn.microsoft.com/Forums/en-US/40abddf1-efd8-49cb-afe0-dc1aef6c1492/ssdt-unit-tests-vs2019-object-reference-not-set-to-an-instance-of-an-object?forum=vsunittest

我卸载然后编辑 Visual Studio 中的每个项目。我可以看到 SSDT 项目的 ToolsVersion 是“4.0”,即使它是在 Visual Studio 2019 年从头开始创建的,而从 SSDT 项目创建的单元测试项目的 ToolsVersion 是“15.0”。

我将 SSDT 项目的 ToolsVersion 设置为“15.0”以匹配单元测试项目。

重新加载每个项目后,我就可以使用测试设计器无误地设置测试条件属性。

为了清楚我在说什么,这里是 SSDT 项目文件的精简版。您可以在 Project 标签顶部附近看到 ToolsVersion 属性:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="15.0">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <Name>SQlServerUnitTestingDemo</Name>
    ...
  </PropertyGroup>
  ...
</Project>