я следующий интерфейс, который используется для DI и МОК клиентов веб-сервисавызов Moq функции с выражением
public interface IWcfServiceClientProvider <TContract>: IDisposable where TContract: class
{
TResult Execute<TResult>(Expression<Func<TContract, TResult>> expression);
TResult Execute<TResult>(Expression<Func<TContract, TResult>> expression, bool closeConnection = true);
void Execute(Expression<Action<TContract>> expression);
void Execute(Expression<Action<TContract>> expression, bool closeConnection = true);
}
В моем тестовом классе у меня есть следующие:
List<BaseLookup> myList = new List<BaseLookup> {
new BaseLookup { Id =1, Code = "1001"},
new BaseLookup { Id =2, Code = "1002"},
new BaseLookup { Id =3, Code = "1003"}};
В моем методе испытания
Mock<IWcfServiceClientProvider<ILookupService>> lookupServiceClinetProvider = new Mock<IWcfServiceClientProvider<ILookupService>>();
var controller = new ElectorSearchController(lookupServiceClinetProvider.Object);
lookupServiceClinetProvider.Setup(mock => mock.Execute(lookup => lookup.GetList(10))).Returns(myList).Verifiable();
var list = controller.testMethod();
lookupServiceClinetProvider.VerifyAll();
список будет иметь значение, если для параметра GetList
установлено значение 10, то есть GetList(10)
Не GetList(i)
где я = 10
следующие работы
lookupServiceClinetProvider.Setup(mock => mock.Execute(It.IsAny<Expression<Func<ILookupService, List<BaseLookup>>>>(), true)).Returns((List<BaseLookup>)myList).Verifiable();
Но я хочу, чтобы дразнить призыв к GetList
и не любой вызов Execute. Если это работает, то я могу фильтровать значения в Return
методы
Кто-нибудь знает, что мне не хватает? Спасибо –
Я также попробовал Mocking ILookupService. Но Execute не соответствовал этому. Я попробовал решение по адресу http://stackoverflow.com/questions/16124263/moq-linq-expression-in-repository-specify-expression-in-setup, все еще не работало. –