1

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

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,我认为必须有一种简单的方法来使用它们的属性来做到这一点,我只是现在不明白。有任何想法吗?

4

3 回答 3

1

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

您将在 MbUnit v3.0.6 中的 MbUnit.Samples 项目的“SampleCollectionTest”夹具中找到一个示例。

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

于 2009-04-01T07:11:17.690 回答
1

MbUnit v3有一个新的有用的Assert.Sorted方法。您只需要传递枚举实例即可进行评估。如果枚举对象实现了 IEquatable,那么一切都是自动的。

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

否则,您仍然可以指定自定义比较标准(例如,使用新的方便的结构相等比较器)。

[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 文档参考

于 2009-06-02T12:27:50.170 回答
0

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

于 2009-03-30T23:02:59.073 回答