2

Moq は初めてで、リポジトリをモックしようとしています。

私が単体テストを書いているメソッドは、次のようにリポジトリを呼び出しています。

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

私は次のようにmoqを設定しようとしています:

_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));
4

1 に答える 1

4

呼び出しに具体的な述語を含める代わりに、SingleOrDefaultMoq のIt.IsAny<T>メソッドを使用します。

_agreementPaymentStateRepositoryMock
         .Setup(m => m.SingleOrDefault(It.IsAny<Expression<Func<bool,PaymentState>>>()))
         .Returns(AgreementPayMentStateMocks.GetOne);
于 2013-09-17T20:10:22.623 に答える