我将一个解决方案从 VS2008 转换为 VS2010 SP1,并将单元测试项目更改为针对 3.5 框架。除了必须在单元测试项目中修复一些引用之外,一切正常并且解决方案构建成功。大多数测试成功运行,但也有少数测试失败。失败的是使用私有访问器。就个人而言,我宁愿删除这些测试,因为我认为它们没有必要,但只要它揭示了 SP1 中的潜在错误,我想我会看看是否有人能找到解决方法。
运行测试时收到的错误消息是“此程序集由比当前加载的运行时更新的运行时构建,无法加载。” 据我所知,私有访问器程序集似乎是由 4.0 运行时构建的(很可能是通过 Microsoft.VisualStudio.QualityTools.UnitTestFramework),但由于 3.5 运行时是由 MSTest 加载的,因此会发生错误。
我尝试将 Microsoft.VisualStudio.QualityTools.UnitTestFramework 的参考更改为专门使用 9.0 版(目前是 10.1)。这会导致编译时错误,指出私有访问器程序集使用 Microsoft.VisualStudio.QualityTools.UnitTestFramework 的 10.0 版,该版本高于 9.0 版。
我已经删除了生成的私有访问器程序集并重新创建了它,但仍然有同样的问题。当 3.5 框架以单元测试项目为目标时,似乎有些东西与 VS2010 SP1 不同步。
这是其中一个单元测试的代码(同样,这不是一个非常有价值的测试,但这不是帖子的重点......):
[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);
}