MbUnit:测试自定义有序集合

时间:2009-03-30 21:40:29

标签: c# unit-testing sorting collections mbunit

我有自定义集合类型的数据。该数据按其顺序按三个属性排序,例如采取以下示例:

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和MbUnit 3,我认为必须有一个简单的方法来实现它们的属性,我只是现在没有得到它。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

Yann Trevin一直致力于MbUnit v3的“CollectionContract”。我认为它现在不能处理有序集合,但我确信他有兴趣在适当的比较委托中添加该功能来描述排序不变量。

您可以在MbUnit v3.0.6中的MbUnit.Samples项目的“SampleCollectionTest”夹具中找到此示例。

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

答案 1 :(得分:1)

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 :(得分:0)

在MbUnit v2中,您可以使用CollectionOrderFixture ..但是找不到它MbUnit v3虽然