gpt4 book ai didi

unit-testing - 如果使用私有(private)访问器,针对 3.5 框架的 VS2010 SP1 单元测试会失败

转载 作者:行者123 更新时间:2023-12-04 04:36:59 25 4
gpt4 key购买 nike

我将一个解决方案从 VS2008 转换为 VS2010 SP1,并将单元测试项目更改为针对 3.5 框架。除了必须在单元测试项目中修复一些引用之外,一切正常并且解决方案构建成功。大多数测试成功运行,但也有少数测试失败。失败的是使用私有(private)访问器。就个人而言,我宁愿删除这些测试,因为我认为它们没有必要,但只要它揭示了 SP1 中的潜在错误,我想我会看看是否有人能找到解决方法。

运行测试时收到的错误消息是“此程序集由比当前加载的运行时更新的运行时构建,无法加载。”
据我所知,私有(private)访问器程序集似乎是由 4.0 运行时构建的(很可能是通过 Microsoft.VisualStudio.QualityTools.UnitTestFramework),但由于 3.5 运行时是由 MSTest 加载的,因此会发生错误。

我尝试将 Microsoft.VisualStudio.QualityTools.UnitTestFramework 的引用更改为专门使用 9.0 版(目前是 10.1)。这会导致编译时错误,指出私有(private)访问器程序集使用 Microsoft.VisualStudio.QualityTools.UnitTestFramework 的 10.0 版,该版本高于 9.0 版。

我已经删除了生成的私有(private)访问器程序集并重新创建了它,但仍然有同样的问题。当 3.5 框架以单元测试项目为目标时,似乎有些东西与 VS2010 SP1 不同步。

这是其中一个单元测试的代码(同样,这不是一个非常有值(value)的测试,但这不是帖子的重点......):

    [TestMethod()]
public void GetNullableCharValue_DBNull_ReturnsNull_Test()
{
object value = DBNull.Value;
Nullable<char> expected = null;
Nullable<char> actual;
actual = RepositoryBase_Accessor.GetNullableCharValue(value);
Assert.AreEqual(expected, actual);
}

最佳答案

我也遇到了这个问题。 Visual Studio 2010 SP1 增加了对基于 .NET v3.5 的单元测试项目的支持;以前的单元测试被迫使用 .NET4。

有一个Microsoft Connect bug关于这个主题,但它只是在我写这个答案的那天提交的,所以微软还没有有意义的回应。

我选择的解决方法是使用 Visual Studio 2008 工具链手动生成私有(private)访问器程序集,并从单元测试项目中添加对其的手动引用。

步骤是:

1)从单元测试 .csproj 文件中删除自动生成的访问器:

<ItemGroup>
<Shadow Include="Test References\Assembly.accessor" />
</ItemGroup>

2) 使用 Publicize VS2008 创建与 v3.5 兼容的访问器程序集:
"%VS90COMNTOOLS%vsvars32.bat"
publicize Assembly.dll

3)将程序集复制到源树文件夹,例如在一个文件夹下 Accessors :
copy Assembly_Accessor.dll ProjectDir\Accessors\Assembly_Accessors.dll

4) 使用 Visual Studio 界面添加访问器程序集作为对单元测试项目的引用:
Project -> Add Reference.. -> Browse...

5) 使用 Ctrl+Shift+B 构建您的解决方案并运行您的测试。

您现在可以 checkin 生成的程序集或在预构建事件中自动创建它。

关于unit-testing - 如果使用私有(private)访问器,针对 3.5 框架的 VS2010 SP1 单元测试会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5397251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com