【问题标题】:How to use mockito for implement dummy?如何使用 mockito 实现假人?
【发布时间】:2011-08-17 09:01:54
【问题描述】:

我有简单的代码:

public interface AccountService {
    public boolean verifyBalance(AccountInfo account);
}


public class MoneyTransferServiceBean implements MoneyTransferService {
    private AccountService accountService;

    class MoneyTransfer {
        private TransferRequest request;
        public MoneyTransfer(TransferRequest request) {
            this.request = request;
        }

        private void verifySrcBalance() throws TransferException {
            if (!accountService.verifyBalance("request")
                throw new TransferException("LOW_BALANCE_ERROR_MESSAGE");
        }

    }
}

我如何为 accountService.verifyBalance() 实现虚拟化

我正在尝试这个:

private MoneyTransferServiceBean moneyTransferService;
AccountService mockedAccountService = mock(AccountService.class);
doReturn(true).when(mockedAccountService).verifyBalance("request");
MoneyTransfer moneyTransfer = moneyTransferService.new MoneyTransfer(transferRequest);
moneyTransfer.verifySrcBalance();

但这并没有生效。

【问题讨论】:

    标签: junit mockito


    【解决方案1】:

    一般 doX() 方法用于模拟异常抛出和 void 方法。 其他用途由 when([method_call]).thenX(); 首先使用 setter 或 Whitebox 创建 mock 并将您的 mock 放入经过测试的服务中:

    MoneyTransferServiceBean moneyTransferService = new MoneyTransferServiceBean();
    AccountService mockedAccountService = mock(AccountService.class);
    Whitebox.setInternalState(moneyTransferService , "accountService", mockedAccountService);
    

    你应该像这样模拟与模拟的交互:

    when(mockedAccountService.verifyBalance(eq(accInfo)).thenReturn(true);
    verify(mockedAccountService).verifyBalance(accInfo);
    verifyNoMoreInteractions(mockedAccountService);
    

    Mockito 网站上有很好的例子来解释这一切。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2021-07-09
      • 2021-12-30
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多