簡體   English   中英

如何在 xUnit 中為 class 構造函數創建單元測試?

[英]How to create unit test for class constructor in xUnit?

假設我有這個 class:

public class BankAccount : IBankAccount
{
    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;
    }

    public void Deposit(BankTransaction bankTransaction)
    {
        if (bankTransaction.TransactionAmount <= 0)
        {
            throw new ArgumentException("Deposit failed. Transaction amount is more than account balance.");
        }

        this.Balance += bankTransaction.TransactionAmount;

        // Insert transaction record at BankTransaction Repository class
    }
}

我之前的設計是在方法參數中存款有BankAccount 通過這種設計,我可以為Deposit方法創建單元測試,如下所示:

    [Theory, MemberData(nameof(DepositShouldPass_Data))]
    public void DepositShouldPass(BankAccount account, BankTransaction bankTransaction, BankAccount accountExpected)
    {
        // Act
        _bankAccount.Deposit(account, bankTransaction);

        // Assert
        Assert.Equal(accountExpected.Balance, _bankAccount.Balance);
    }

    public static TheoryData<BankAccount, BankTransaction, BankAccount> DepositShouldPass_Data()
    {
        return new TheoryData<BankAccount, BankTransaction, BankAccount>
        {
            {
                new BankAccount(123, 250.00M),
                new BankTransaction(50.00M),
                new BankAccount(123, 300.00M)
            },
            {
                new BankAccount(321, 150.50M),
                new BankTransaction(10.50M),
                new BankAccount(321, 160.00M)
            }
        };
    }

但是現在,我想重新設計BankAccount class 通過刪除BankAccount作為Deposit方法中的方法參數。 有了這個新設計,我如何使用 xUnit 傳遞測試數據? 其次是如何為我的構造函數創建單元測試?

你可以試試這個:

var bankAccountNo = new Random().Next();
var balance = 0;
BankAccount TestCode() => new BankAccount(bankAccountNo, balance);
var exception = Assert.Throws<ArgumentException>(TestCode);
Assert.StartsWith("Create bank account failed. Balance should be more than zero.", exception.Message);

和這個:

var bankAccountNo = new Random().Next();
var balance = new Random().Next();
var bankAccount = new BankAccount(bankAccountNo, balance);
Assert.Equal(bankAccountNo, bankAccount.BankAccountNo);
Assert.Equal(balance, bankAccount.Balance);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM