[英]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.