检查预期列表中是否存在对象

Check if an object exist in expected list

我有这个classPOCO

public class BankTransaction
{
    public int Id { get; set; }
    public decimal TransactionAmount { get; set; }
    public TransactionTypeEnum TransactionType { get; set; }
    public int BankAccountId { get; set; }

    public BankTransaction(decimal TransactionAmount)
    {
        this.TransactionAmount = TransactionAmount;
    }
}

public enum TransactionTypeEnum
{
    Deposit, Withdraw, ThirdPartyTransfer
}

并且此存储库class 插入事务

public class BankTransactionRepository : IBankTransactionRepository
{
    // Mock DB
    public List<BankTransaction> bankTransactions { get; private set; }

    public BankTransactionRepository()
    {
        bankTransactions = new List<BankTransaction>();
    }

    public void InsertTransaction(BankTransaction bankTransaction)
    {
        bankTransactions.Add(bankTransaction);
    }
}

这里是我的 InsertTransaction 方法的 xUnit 单元测试,除了 expected.Should().Contain(trans); 支持检查 trans 对象是否存在于 expected 列表中。

public class BankTransactionsTest
{
    private BankTransactionRepository _bankTransaction;

    public BankTransactionsTest()
    {
        _bankTransaction = new BankTransactionRepository();
    }

    // Arrange
    [Theory, MemberData(nameof(InsertTransaction_InsertShouldPass_Data))]
    public void InsertTransaction_InsertShouldPass(BankTransaction trans, List<BankTransaction> expected)
    {
        // Act
        _bankTransaction.InsertTransaction(trans);

        // Assert
        Assert.Equal(expected.Count, _bankTransaction.bankTransactions.Count);

        // Fluent Assertions to check if trans is in 'expected' list.
        expected.Should().Contain(trans);
    }

    public static TheoryData<BankTransaction, List<BankTransaction>> InsertTransaction_InsertShouldPass_Data()
    {
        return new TheoryData<BankTransaction, List<BankTransaction>>
        {
            {
                new BankTransaction(200.00M),
                new List<BankTransaction>(){new BankTransaction(200.00M)}              
            },
            {
                new BankTransaction(50.50M),
                new List<BankTransaction>(){new BankTransaction(50.50M)}
            },
        };
    }
}

更改方法以更明确地断言预期行为:

调用InsertTransaction时插入的对象,实际上包含在被测对象中。

public class BankTransactionsTest
{
    private BankTransactionRepository _bankTransaction;

    public BankTransactionsTest()
    {
        _bankTransaction = new BankTransactionRepository();
    }

    // Arrange
    [Theory, MemberData(nameof(InsertTransaction_InsertShouldPass_Data))]
    public void InsertTransaction_InsertShouldPass(BankTransaction transaction)
    {
        // Act
        _bankTransaction.InsertTransaction(transaction);

        // Assert
        _bankTransaction.bankTransactions.Should().ContainEquivalentOf(transaction);
    }

    public static TheoryData<BankTransaction> InsertTransaction_InsertShouldPass_Data()
    {
        return new TheoryData<BankTransaction>
        {
            new BankTransaction(200.00M),
            new BankTransaction(50.50M)
        };
    }
}