Unit testing 单元测试服务方法-如何断言

Unit testing 单元测试服务方法-如何断言,unit-testing,Unit Testing,我正试图了解测试功能和最小化断言数量的想法 假设我有这样一种服务方法: public void TransferFunds(int debitedId, int creditedId, Sum funds) { Account debited = accountRepository.Get(debitedId); Account credited = accountRepository.Get(creditedId); debited.Debit(Sum); cr

我正试图了解测试功能和最小化断言数量的想法

假设我有这样一种服务方法:

public void TransferFunds(int debitedId, int creditedId, Sum funds)
{
    Account debited = accountRepository.Get(debitedId);
    Account credited = accountRepository.Get(creditedId);
    debited.Debit(Sum);
    credited.Credit(Sum);
    accountRepository.Update(debited);
    accountRepository.Update(credited);
}
我认为我的单元测试应该分为两部分,测试一个帐户的贷记和另一个帐户的借记。但我是否应该在每个帐户的当前状态上声明,以验证该金额是否已被添加/扣除?或者这是对我的帐户模型的测试?如果是,我应该断言什么?那个更新叫什么?这无法验证功能

有人有想法吗?

如果你测试结果(即最终余额),那么你实际上也在测试账户对象,这里没有测试这些对象,因此你应该尽量避免这样做

在这个场景中,我希望Account是一个可以模拟的接口。我不确定你用的是什么语言(看起来可能是C)。在Java中,我将使用接口和jMock来实现这一点

然后,您断言TransferFunds方法在正确的帐户上使用正确的金额调用Debit,在正确的帐户上使用正确的金额调用Credit。您还需要模拟您的帐户存储库,并让您的模拟框架返回您的模拟帐户以响应AccountRepository。获取

如果您测试结果(即最终余额),那么您也在有效地测试帐户对象,此处未测试这些对象,因此您应该尽可能避免这种情况

在这个场景中,我希望Account是一个可以模拟的接口。我不确定你用的是什么语言(看起来可能是C)。在Java中,我将使用接口和jMock来实现这一点


然后,您断言TransferFunds方法在正确的帐户上使用正确的金额调用Debit,在正确的帐户上使用正确的金额调用Credit。您还需要模拟您的帐户存储库,并让您的模拟框架返回您的模拟帐户以响应AccountRepository。Get

Danny-感谢您的及时回复!因此,在您看来,只有2个断言:debited.AssertWasCalled(x=>x.Debit(sum));贷记.资产被调用(x=>x.贷记(总和));accountRepository上没有断言(accountRepository.AssertWasCall(r=>r.Update(credited));也没有借记)是的,这很有意义:)谢谢!正如我所说,我不熟悉您正在使用的语言或框架,但在Java/jMock中,我将执行以下操作:*创建两个模拟帐户*创建一个模拟AccountRepository*“允许”AccountRepository在请求时使用正确的ID返回帐户(我不会“要求”这个,因为这不是我们正在尝试测试的功能)*断言在第一个帐户上使用正确的金额调用借方方法*断言在第二个帐户上使用正确的金额调用贷方方法-感谢您的及时回复!因此,在您看来,只有2个断言:debited.AssertWasCalled(x=>x.Debit(sum));贷记.资产被调用(x=>x.贷记(总和));accountRepository上没有断言(accountRepository.AssertWasCall(r=>r.Update(credited));也没有借记)是的,这很有意义:)谢谢!正如我所说,我不熟悉您正在使用的语言或框架,但在Java/jMock中,我将执行以下操作:*创建两个模拟帐户*创建一个模拟AccountRepository*“允许”AccountRepository在请求时使用正确的ID返回帐户(我不会“要求”这个,因为这不是我们正在尝试测试的功能)*断言在第一个帐户上使用正确的金额调用借方方法*断言在第二个帐户上使用正确的金额调用贷方方法