#c# #unit-testing #fluent-assertions
Вопрос:
Я пытаюсь использовать свободные утверждения для тестирования алгоритма генерации перестановок. Алгоритм генерирует a List<int[]>
, где List
порядок не имеет значения, но элементы каждого int[]
имеют значение.
[Fact]
public void Are_all_permutations_generated()
{
// Arrange
var expected = new List<int[]>
{
new[] { 1, 2, 3 },
new[] { 1, 3, 2 },
new[] { 2, 1, 3 },
new[] { 2, 3, 1 },
new[] { 3, 1, 2 },
new[] { 3, 2, 1 }
};
// Act
var result = new List<int[]>
{
new[] { 3, 2, 1 },
new[] { 1, 3, 2 },
new[] { 2, 3, 1 },
new[] { 2, 1, 3 },
new[] { 3, 1, 2 },
new[] { 1, 2, 3 }
};
// Assert
result.Should().BeEquivalentTo(expected);
}
Если я использую result.Should().BeEquivalentTo(expected)
, как в приведенном выше блоке кода, он пройдет, даже если result
был
var result = new List<int[]>
{
new[] { 1, 2, 3 },
new[] { 1, 2, 3 },
new[] { 1, 2, 3 },
new[] { 1, 2, 3 },
new[] { 1, 2, 3 },
new[] { 1, 2, 3 }
};
Как я могу написать утверждения Fluent, чтобы разрешить любой порядок для списка, но иметь строгий порядок для массивов, чтобы он мог утверждать, что все перестановки были найдены? Есть ли какой-то способ написать options
в BeEquivalentTo
, чтобы сделать это?
Ответ №1:
Используется WithStrictOrderingFor
для определения того, хотите ли вы использовать строгий порядок или нет. Для этого требуется лямбда , которая предоставляет вам доступ к IObjectInfo
объекту, предоставляющему всю необходимую информацию, которую вы можете использовать. Что-то вроде
WithStrictOrderingFor(info => info.RuntimeType == typeof(int[]))
Ответ №2:
Вы можете попробовать использовать WithStrictOrdering
утверждение массива.
Например:
result.Should().BeEquivalentTo(expected, options => options.WithStrictOrdering());
Кроме того, вы можете ознакомиться с документами по утверждению коллекции из FluentAssertion, они предоставляют больше возможностей для сравнения коллекций.
Комментарии:
1. Это обеспечивает строгий порядок как для родительского
List
, так и для дочернего массивов. Мне нужен любой порядок в списке и строгий порядок только для элементов массива.