繁体   English   中英

Moq验证是否使用任何表达式调用了Method

[英]Moq Verify that Method was called with any expression

我是Moq的新手,正在尝试模拟我的存储库。

我正在编写单元测试的方法是这样调用存储库:

var paymentState = _agreementPaymentStateRepository.SingleOrDefault(
                         s => s.Agreement.ID == agreementID);

我正在尝试像这样设置起订量:

_agreementPaymentStateRepositoryMock
         .Setup(m => m.SingleOrDefault(s => s.AgreementID == 1))
         .Returns(AgreementPayMentStateMocks.GetOne);

我将模拟的存储库传递给该类,但是在进行调用之后,paymentState变量为null。 (我很乐意也跳过指定表达式)。

任何帮助深表感谢。

public PaymentState GetPaymentState(int agreementID)
    {
        try
        {
            _log.AgreementPaymentStateServiceGetStateStart(agreementID);
            var paymentState =
                _agreementPaymentStateRepository.SingleOrDefault(s => s.Agreement.ID == agreementID);

            var stateToGet = MapStateToGet(paymentState);

            _log.AgreementPaymentStateServiceGetStateReturn(agreementID, paymentState.LatestStatus);
            return stateToGet;
        }
        catch (Exception ex)
        {
            _log.ServiceException(ex.ToString());
            throw;
        }
    }

和测试:

 var paymentState = AgreementPayMentStateMocks.GetPayMentState();

        _agreementPaymentStateRepositoryMock.Setup(m => m.SingleOrDefault(s => s.AgreementID == 1)).Returns(AgreementPayMentStateMocks.GetOne);

        var service = new AgreementPaymentStateService(_agreementPaymentStateRepositoryMock.Object, _log.Object);
        var result = service.GetPaymentState(1);

        _agreementPaymentStateRepositoryMock.Verify(m => m.Match(aps => aps.SingleOrDefault(s => s.AgreementID == 1)), Times.Exactly(1));

而不是在SingleOrDefault调用中包含具体谓词,请使用Moq的It.IsAny<T>方法:

_agreementPaymentStateRepositoryMock
         .Setup(m => m.SingleOrDefault(It.IsAny<Expression<Func<bool,PaymentState>>>()))
         .Returns(AgreementPayMentStateMocks.GetOne);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM