.net 考虑开发人员时间的单元测试GetHashCode
在我当前的项目中,我有几个IEqualitycomparers。.net 考虑开发人员时间的单元测试GetHashCode,.net,unit-testing,iequalitycomparer,.net,Unit Testing,Iequalitycomparer,在我当前的项目中,我有几个IEqualitycomparers。 这些属性获取一个对象的多个属性并进行比较。 属性可以是相等的,也可以是不同的,这对于值和null都是一样的 我想对这些进行单元测试,但所有不同的可能性都是疯狂的。 如何有效地测试这些 更新 目前,它们通过属性而不是构造函数获取值,因为它们是用entlib的数据块填充的 示例(在vb.net中,但我也讲C): 好的,考虑到有一个构造函数的可能性,我将尝试编写一个实用程序类,它允许您为每个构造函数参数指定示例值: var compar
这些属性获取一个对象的多个属性并进行比较。
属性可以是相等的,也可以是不同的,这对于值和null都是一样的 我想对这些进行单元测试,但所有不同的可能性都是疯狂的。 如何有效地测试这些 更新
目前,它们通过属性而不是构造函数获取值,因为它们是用entlib的数据块填充的 示例(在vb.net中,但我也讲C):
好的,考虑到有一个构造函数的可能性,我将尝试编写一个实用程序类,它允许您为每个构造函数参数指定示例值:
var comparer = new GuarantyEqualityComparer();
var tester = EqualityTester<Guaranty>.CreateBuilder(comparer)
.AddValue("ClientCode", "Sample1", "Sample2", null)
.AddValue("LocationCode", 1, 3, 0)
.Builder();
tester.Test();
对于野田佳彦来说,我们在a中有一些这样的功能,允许使用如下方法:
public override int GetHashCode()
{
int hash = HashCodeHelper.Initialize();
hash = HashCodeHelper.Hash(hash, LocalInstant);
hash = HashCodeHelper.Hash(hash, Offset);
hash = HashCodeHelper.Hash(hash, Zone);
return hash;
}
助手为您处理空值。所有这些都比每次需要计算哈希代码时通过格式化创建字符串要好得多。顺便说一句,这并不是生成哈希代码的好方法+1问一个有用的问题:)你能告诉我们更多关于你正在比较的类型是如何构造的吗?例如,是否总是有一个包含所有相关部分的构造函数?目前没有需要这些值的构造函数。它们可以为空。关于你的旁白:是的,我记得现在有一篇关于好的哈希代码的答案或文章。老实说,所有的等式和hashcode系统总是让我摸不着头脑。@JonSkeet,我想你问的是关于ctor的事情,因为你想知道字段是否是不可变的。从功能上讲,它们是可以的,但没有技术上的原因。不是真的-我主要是想知道助手类如何构造实例。我不介意还有什么其他构造函数,只要有一个允许基于所有值进行构造。
int hash = 19;
hash = hash * 31 + HashOfField1;
hash = hash * 31 + HashOfField2;
...
return hash;
public override int GetHashCode()
{
int hash = HashCodeHelper.Initialize();
hash = HashCodeHelper.Hash(hash, LocalInstant);
hash = HashCodeHelper.Hash(hash, Offset);
hash = HashCodeHelper.Hash(hash, Zone);
return hash;
}