Я выполняю модульное тестирование для наших служб RIA WCF, к которым прикреплены атрибуты RequiresRole
или RequiresAuthentication
. Я смог протестировать методы Update, Insert и Delete, чтобы убедиться, что атрибуты установлены правильно. Это делается путем насмешки IServiceProvider
, создания DomainServiceContext
с этим провайдером и правильным DomainOperationType
, добавления услуги IPrincipal
к поставщику услуг и последующего запуска Submit()
в службе с соответствующим ChangeSet
, Кажется, это хорошо работает.
Однако мне не удалось протестировать вызовы Query. Они вызываются с помощью метода Query()
службы. Поэтому я делаю ту же подготовительную работу, что и с другими (Создание IServiceProvider
, DomainServiceContext
и IPrincipal
) и пытаюсь создать соответствующие DomainOperationEntry
и QueryDescription
для перехода на Query()
. К сожалению, мне еще не повезло с этим. Соответствующий код:
string operationName = "GetUsers";
DomainServiceContext domainServiceContext = GetDomainServiceContext(
authenticate: false,
operationType: DomainOperationType.Query);
DomainOperationQuery operationQuery = mocks.DynamicMock<DomainOperationEntry>(
typeof(UserService), operationName, DomainOperation.Query,
typeof(IQueryable<User>), new List<DomainOperationParameter>(),
new AttributeCollection());
mocks.ReplayAll();
service.Initialize(domainServiceContext);
int totalCount;
IEnumerable<ValidationResult> validationErrors;
QueryDescription = new QueryDescription(operationEntry);
service.Query(queryDescription, out ValidatoinErrors, out TotalCount);
Это должно выдать UnauthorizedAccessException
, когда RequiresAuthentication
установлено в запросе GetUsers
. Однако я ничего не получаю, независимо от того, установлен ли атрибут. Используя отладчик с установленной точкой останова для метода GetUsers
, я вижу, что этот метод никогда не вызывается. Я думаю, что я неправильно понял operationName
. Но я не знаю, в этом ли проблема, или, если это так, на что мне следует ее изменить.
У кого-нибудь есть понимание этого? Я искал все через MSDN и сделал поиски Google и искал здесь широко. У меня пока ничего нет.