Первый: в вашем утверждении вы сравниваете два BankAccounts через Ссылочное равенство , пока вы не реализуете IEquatable и переопределяете Equals (object obj)).Таким образом, у вас есть два основных варианта:
1) Проверить каждое сопоставимое свойство (например, int, string, ...) и написать для него утверждение.Например:
Assert.AreEqual(account.Owner.FirstName, account2.Owner.FirstName);
Assert.AreEqual(account.Owner.LastName, account2.Owner.LastName);
Assert.AreEqual(account.Balance, account2.Balance);
2) Реализуйте интерфейс IEquatable - и / или переопределите Equals (объект obj), чтобы сделать сравнение на равенство работой самого BankAccount.
Assert.AreEqual(o1,o2); //basically calls
o1.Equals(o2);
Чтобы сравнить их на равенство, вам необходимо как минимум переопределить метод Equals (object obj).
public class BankAccount
{
...
public override bool Equals(object obj)
{
if (!(obj is BankAccount)) return false;
var other = obj as BankAccount;
return this.Owner.FirstName == other.Owner.FirstName &&
this.Owner.LastName == other.Owner.LastName &&
this.Balance == other.Balance;
}
}
Второе: ваш тест все равно не пройден, посколькуу вас там разные ценности.Таким образом, для успешной работы Assert.AreEqual (o1, o2) вам придется поместить туда одинаковые значения.
Преимущество первого подхода состоит в том, что он точно покажет вам, где находятся две учетные записи.отличается, в то время как другой просто указывает, что они разные, используя ToString ().
В вашем случае у вас будет необходимая информация из-за переопределения ToString (), но я бы предпочел первый, если вам все равно не нужно переопределять метод Equals.