0

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

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

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

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

Мне нужно проверить, что actual.Alpha == expected.Alpha и actual.Beta == expected.Alpha

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

ответ

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); 
} 
+0

Спасибо за ответ. Может ли это также применяться к объектам коллекции? Скажем, у меня Список ожидается; Список актуальный; actual.ShouldBeEquivalentTo (ожидается); – Chris

+0

Я думаю, что текущее утверждение не поддерживает такое сравнение. Я знаю, как это сделать в NUnit и как создать метод для использования в vs-unit-testing-framework. Я отредактирую свой тент и напишу метод –