【发布时间】:2020-06-16 01:36:26
【问题描述】:
我有这个类和它的构造函数
public class BankAccount
{
public int Id { get; private set; }
public int BankAccountNo { get; private set; }
public decimal Balance { get; private set; }
public BankAccount(int BankAccountNo, decimal Balance)
{
this.BankAccountNo = BankAccountNo;
if(Balance <= 0)
{
throw new ArgumentException("Create bank account failed. Balance should be more than zero.");
}
this.Balance = Balance;
}
}
我创建了用于检查对象相等性的 xunit 单元测试
公共类 BankAccountTest { 私人银行账户 _bankAccount;
public BankAccountTest()
{
_bankAccount = new BankAccount();
}
[Theory, MemberData(nameof(BankAccountConstructorShouldPass_Data))]
public void BankAccountConstructorShouldPass(BankAccount account, BankAccount accountExpected)
{
// Act
_bankAccount = new BankAccount(account.BankAccountNo, account.Balance);
// Assert
Assert.Equal<BankAccount>(accountExpected,_bankAccount);
}
public static TheoryData<BankAccount, BankAccount> BankAccountConstructorShouldPass_Data()
{
return new TheoryData<BankAccount, BankAccount>
{
{
new BankAccount(123, 250.00M),
new BankAccount(123, 250.00M)
},
{
new BankAccount(321, 150.50M),
new BankAccount(321, 150.50M)
}
};
}
}
当我运行测试时,它失败并出现错误
Assert.Equal() Failure
Expected: BankAccount { Balance = 250.00, BankAccountNo = 123, Id = 0 }
Actual: BankAccount { Balance = 250.00, BankAccountNo = 123, Id = 0 }
我尝试了Assert.True(accountExpected.Equals(_bankAccount));,但仍然没有成功。
【问题讨论】:
-
这能回答你的问题吗? Best way to compare two complex objects。您始终可以将它们都序列化并检查生成的字符串
-
谷歌搜索
xunit compare two objects。 buildplease.com/pages/testing-deep-equalilty -
谢谢。设法使用 FluentAssertions 解决它。
accountExpected.Should().BeEquivalentTo(_bankAccount);。但是,如果没有 FluentAssertions,我还不知道如何解决它。