代码之家  ›  专栏  ›  技术社区  ›  grover

MBUnit:测试自定义排序集合

  •  1
  • grover  · 技术社区  · 15 年前

    我有一个自定义的数据收集类型。此数据按三个属性的顺序排序,例如,以下面的示例为例:

    class Data
    {
      public int PropertyA() { get; set; }
      public int PropertyB() { get; set; }
      public int PropertyC() { get; set; }
    }
    

    托收必须保持A、B、C的顺序,例如:

    [A, B, C]
    [1, 2, 5]
    [1, 3, 3]
    [1, 3, 4]
    [1, 4, 1]
    [2, 1, 2]
    [3, 3, 1]
    [3, 4, 2]
    

    我想编写一些测试,以确保通过常见的可疑添加和删除操作在集合中维护此顺序。我使用的是Gallio和MBUnit3,我想用它们的属性一定有一个简单的方法来实现这一点,我现在还不知道。有什么想法吗?

    3 回复  |  直到 15 年前
        1
  •  1
  •   Yann Trevin    15 年前

    MbUnit v3 有新的有用的 Assert.Sorted 方法。您只需要通过枚举实例进行计算。如果枚举对象实现IEquatable,那么一切都是自动的。

    [Test]
    public void MySimpleTest
    {
       var array = new int[] { 1, 5, 9, 12, 26 };
       Assert.Sorted(array);
    }
    

    否则,您仍然可以指定自定义比较条件(使用 structural equality comparer 例如。

    [Test]
    public void MyComplexTest
    {
       var array = new Foo[] { new Foo(123), new Foo(456), new Foo(789) };
       Assert.Sorted(array, new StructuralEqualityComparer<Foo>
       {
          { x => x.Value }
       });
    }
    

    看看Gallio/MBUnit API doc reference 了解更多详细信息。

        2
  •  1
  •   Jeff Brown    15 年前

    Yann Trevin一直在为MBUnit v3开发“CollectionContract”。我认为它现在不能处理有序集合,但我确信他会有兴趣在给定一个适当的比较委托来描述有序不变量的情况下添加该功能。

    您将在MBUnit v3.0.6中mbUnit.samples项目的“sampleCollectionList”fixture中找到一个这样的例子。

    我建议您将您的想法发布到mbunitdev邮件列表,他将在其中看到: http://groups.google.com/group/mbunitdev

        3
  •  0
  •   Mauricio Scheffer    15 年前

    在MBUnit V2中,您可以使用 CollectionOrderFixture …但找不到它,MBUnit v3

    推荐文章