FluentAssertions: как сравнить свойства с другим именем

У меня есть два объекта одного типа, которые мне нужно сравнить, но значение одного свойства объекта в объекте A должно быть равно свойству с другим именем в объекте B.

Учитывая мой объект:

class MyObject
{
    public string Alpha {get; set;}
    public string Beta {get; set;}
}

var expected = new MyObject {"string1", "string1"};
var actual = new MyObject {"string1", null};

Мне нужно проверить, что фактическое.Альфа == ожидаемое.Альфа и фактическое.Бета == ожидаемое.Альфа

Можно ли это сделать?


person Chris    schedule 02.06.2016    source источник


Ответы (1)


Я думаю, вы хотите что-то вроде этого:

// VS Unit Testing Framework
Assert.IsTrue(actual.Alpha == expected.Alpha, "the Alpha objects are not equals");
Assert.IsTrue(actual.Beta == expected.Beta, "the Beta objects are not equals");

// Fluent Assertion
actual.Alpha.Should().Be(expected.Alpha);
actual.Beta.Should().Be(expected.Beta);

Кроме того, если вы хотите сравнить списки объектов

// Helper method to compare - VS Unit Testing Framework
private static void CompareIEnumerable<T>(IEnumerable<T> one, IEnumerable<T> two, Func<T, T, bool> comparisonFunction)
{
    var oneArray = one as T[] ?? one.ToArray();
    var twoArray = two as T[] ?? two.ToArray();

    if (oneArray.Length != twoArray.Length)
    {
        Assert.Fail("Collections have not same length");
    }

    for (int i = 0; i < oneArray.Length; i++)
    {
        var isEqual = comparisonFunction(oneArray[i], twoArray[i]);
        Assert.IsTrue(isEqual);
    }
}

public void HowToCall()
{
    // How you need to call the comparer helper:
    CompareIEnumerable(actual, expected, (x, y) => 
        x.Alpha == y.Alpha && 
        x.Beta == y.Beta );
}
person Striter Alfa    schedule 02.06.2016
comment
Спасибо за ответ. Можно ли это также применить к объектам коллекции? Скажем, у меня ожидается List‹MyObject›; Список‹МойОбъект› актуальный; фактический.ShouldBeEquivalentTo(ожидаемый); - person Chris; 03.06.2016
comment
Я думаю, что беглое утверждение не поддерживает такого рода сравнение. Я знаю, как это сделать в NUnit и как создать метод для его использования в vs-unit-testing-framework. Я отредактирую свой авсер и напишу метод - person Striter Alfa; 03.06.2016