我应该使用哪些对象类型来测试泛型集合?

时间:2012-02-20 22:58:57

标签: c# .net

哪些对象类型最适合编写泛型集合的单元测试?显然,如果我在我的应用程序中以特定方式使用它们,最好使用这些类型进行测试。但是,如果我不是,只是创建一个实用程序库,我应该使用哪些类型?

我试图避免使用特定对象类型的任何陷阱。例如,在测试通用字典结构时,我知道GetHashCodeEquals方法对于确保有效测试非常重要。我担心如果我只是使用虚拟object个实例(var a = new object();),我会遇到这些方法不够健全的问题。

我考虑将GUID个实例用于我的所有单元测试,因为它们必然具有独特的约束。但是,作为结构体,如果需要,我无法测试等效参考。

最后,在使用特定对象实现(例如objectGUID)代替通用类型进行单元测试时,是否还有其他需要注意的问题?

3 个答案:

答案 0 :(得分:2)

如果您想要彻底,您应该测试几种类型:

  1. 值类型,例如int
  2. 使用引用相等的引用类型
  3. 已覆盖Equals + GetHashCode
  4. 的引用类型
  5. 传入IEqualityComparer<T>
  6. doublefloat表示他们奇怪的NaN语义。
  7. 并非所有测试都需要进行。但我会为每个人添加至少一个测试。

答案 1 :(得分:0)

你可以使用ArrayList。使用自定义对象填充它,其中一个是像主键一样的整数,其他对象是您的数据。它不是通用的集合,但使用起来非常方便。

    class MyObject
    {
        public int myPrimaryKey {get; set;}
        public object myData {get; set;}
    {

然后你要做的就是将它添加到ArrayList:

    var a = new ArrayList();
    a.add(new MyObject{myPrimaryKey = 1, object = 'some value'});

希望这就是你要找的东西。

答案 2 :(得分:-2)

如果您想要从System.Collections命名空间测试通用集合,那么这是一种错误的测试方法。

您的测试应仅涵盖您的代码,但不包括您未开发的其他内容。