2013-09-18 1 views
0

Я пытаюсь Мок мой общий репозиторий. У меня есть метод, называемый SingleOrDefaultIncluding который выглядит следующим образом:Can Moq игнорировать, сколько параметров передано funcion?

T SingleOrDefaultIncluding(Expression<Func<T, bool>> wherePredicate, params Expression<Func<T, object>>[] includes); 

Теперь в моем модульном тестировании я создал Moq так:

_agreementRepositoryMock.Setup(m => m.SingleOrDefaultIncluding 
               (
                It.IsAny<Expression<Func<Agreement, bool>>>(), 
                It.IsAny<Expression<Func<Agreement, object>>>(), 
                It.IsAny<Expression<Func<Agreement, object>>>() 
               ) 
      ).Returns(AgreementMocks.GetOne()); 

Могу ли я какое-то образом определить, что какие бы параметры, переданное SingleOrDefaultIncluding он должен вернуть мое соглашение? Для выполнения этой работы я должен обязательно передать ровно 3 параметра, как в методе, который я тестирую. Или я могу каким-то образом передать массив в Мок?

+1

Извините, мой ответ может быть неправильным. Вы собираетесь настраивать только тогда, когда массив имеет длину 2? Мой ответ (как он есть) пытается настроить _all_ вызовы. –

ответ

1

Возможно, вы используете форму, где бы вы не расширили params? Что-то вроде:

_agreementRepositoryMock.Setup(m => m.SingleOrDefaultIncluding 
    (
    It.IsAny<Expression<Func<Agreement, bool>>>(), 
    It.IsAny<Expression<Func<Agreement, object>>[]>() 
) 
).Returns(AgreementMocks.GetOne()); 

Примечание [] выше. Непроверенные.

В случае, если я не понял, заморозить число параметров, может быть, попробовать:

_agreementRepositoryMock.Setup(m => m.SingleOrDefaultIncluding 
    (
    It.IsAny<Expression<Func<Agreement, bool>>>(), 
    It.Is<Expression<Func<Agreement, object>>[]>(array => array.Length == 2) 
) 
).Returns(AgreementMocks.GetOne()); 

используя It.Is<> вместо It.IsAny<>.

+0

Я чувствую себя глупо. Я думал, что попробовал это, но я, должно быть, получил скобку в неправильном месте. Работает как шарм. Спасибо! – ekenman

Смежные вопросы