gpt4 book ai didi

c# - 添加到使用 TDD 进行单元测试的私有(private)列表

转载 作者:太空宇宙 更新时间:2023-11-03 19:43:01 26 4
gpt4 key购买 nike

我正在学习 TDD 和模拟,我想知道如何将一些对象添加到私有(private)列表以测试方法和属性。我的代码的基本部分如下:

public class Account
{
private List<Transaction> transactions = new List<Transaction>();

public decimal Balance
{
get
{
throw new NotImplementedException();
// Should be calculated by adding amounts of all transactions
// from private list
}
}

public void AddTransaction(Transaction transaction)
{
throw new NotImplementedException();
}
}

public class Transaction
{
public decimal Amount { get; set; }
public string Note { get; set; }
public DateTime DateTime { get; set; }

public Transaction(decimal amount, string note, DateTime dateTime)
{
Amount = amount;
Note = note;
DateTime = dateTime;
}
}

我想测试属性 Balance,但我不知道如何向列表中添加一些数据。我可以使用 Mock 来做到这一点,还是应该先为 AddTransaction 编写代码,然后在余额测试中使用它?

最佳答案

您应该仅使用公开给它的消费者的公共(public)“端点”来测试您的类。
在您的情况下,它将是 constructorAddTransactionBalance。你的类的职责是添加交易并计算余额。
因此,在您的测试中,您将添加交易并检查 Balance 是否返回预期结果。 AddTransaction 方法将通过对 Balance 属性的测试进行测试。

如果您首先通过编写测试来接近解决方案,那么您无需关心是否有私有(private)列表或字典或其他东西。

例如第一个测试看起来像

var transaction = new Transaction(12.4m, "note", 12.January(2018));
var account = new Account();

account.AddTransaction(transaction);

account.Balance.Should().Be(12.4m);

第二次测试

var transaction1 = new Transaction(50.00m, "note1", 12.January(2018));
var transaction2 = new Transaction(45.99m, "note2", 13.January(2018));
var transaction3 = new Transaction(4.01m, "note3", 14.January(2018));
var account = new Account();

account.AddTransaction(transaction1);
account.AddTransaction(transaction2);
account.AddTransaction(transaction3);

account.Balance.Should().Be(100.0m);

在哪里可以实现

private decimal _balance;

public void AddTransaction(Transaction transaction)
{
_balance += transaction.Amount;
}

public decimal Balance => _balance;

如你所见,类可以不用列表来实现。如果应用程序使用 Balance 的次数多于 AddTransaction 方法,上述方法可能会有效。

通过进行不知道实现的测试,您可以在不更改测试的情况下自由地重构被测类。

关于c# - 添加到使用 TDD 进行单元测试的私有(private)列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50196862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com