Я выполняю модульное тестирование для наших служб WCF RIA, к которым прикреплены атрибуты 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 и много искал здесь. У меня пока ничего нет.