NUnit从ReSharper和Visual Studio 2013获得不同的哈希代码值
本文关键字:哈希 代码 ReSharper Visual 2013 Studio NUnit | 更新日期: 2023-09-27 18:36:52
根据Jon Skeet在这里的回答,我在C#中有一个相当简单的GetHashCode()实现。这是我的代码:
public override int GetHashCode()
{
unchecked
{
int hash = 17;
if (Title != null)
{
hash = hash * 23 + Title.GetHashCode(); // Title is of type string
}
return hash;
}
}
当我通过Visual Studio 2013的测试资源管理器运行针对此方法的NUnit测试时,我得到一个哈希代码值,当我通过ReSharper 8的单元测试资源管理器运行它时,我得到一个不同的值。
这是我的单元测试代码:
[Test]
public void GetGetHashCode_WithLinkAndTitle()
{
const int expected = -1272954771;
var target = new Article
{
Title = "Rumble News"
};
var actual = target.GetHashCode();
Assert.AreEqual(expected, actual);
}
从VS 2013中,我得到实际== -1411317427,从ReSharper我得到实际== -1272954771。
为什么从 GetHasCode() 返回的值在测试运行程序之间不同,如何使它们彼此一致?
你可能
在一个测试运行程序中使用 32 位 CLR,在另一个测试运行程序中使用 64 位 CLR。两者之间string.GetHashCode
的实现不同。您不应该依赖于它们在运行之间保持一致 - 它们只需要在单个进程中保持一致。
(对于GetHashCode
方法来说,从类初始化时随机初始化的静态字段中获取种子是完全合理的。因此,每次运行可执行文件时,您都会获得一组不同的哈希代码 - 但它们在单个应用程序域中仍然是一致的。