Вопрос

У меня есть пользовательский тип сбора данных.Эти данные сортируются по трем свойствам в их порядке, например.возьмем следующий пример:

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 и думаю, что должен быть простой способ сделать это с их атрибутами, просто я сейчас этого не понимаю.Есть идеи?

Это было полезно?

Решение

МбЮнит 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 Больше подробностей.

Другие советы

Янн Тревин работал над «CollectionContract» для MbUnit v3.Я не думаю, что он может сейчас обрабатывать упорядоченные коллекции, но я уверен, что он был бы заинтересован в добавлении этой возможности при наличии соответствующего делегата сравнения для описания инварианта порядка.

Пример этого вы найдете в приспособлении «SampleCollectionTest» проекта MbUnit.Samples в MbUnit v3.0.6.

Я рекомендую вам опубликовать свою идею в списке рассылки mbunitdev, где он ее увидит: http://groups.google.com/group/mbunitdev

В MbUnit v2 вы можете использовать КоллекцияЗаказПриспособление..не могу найти, но это MbUnit v3

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top