МбЕдиница:Тестирование заказной коллекции
-
22-08-2019 - |
Вопрос
У меня есть пользовательский тип сбора данных.Эти данные сортируются по трем свойствам в их порядке, например.возьмем следующий пример:
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