代码之家  ›  专栏  ›  技术社区  ›  Michael Johnson

如何编写单元测试来验证WCF-RIA服务域服务查询方法是否需要身份验证?

  •  1
  • Michael Johnson  · 技术社区  · 15 年前

    我正在为我们的WCF RIA服务进行单元测试,这些服务 RequiresRole RequiresAuthentication IServiceProvider ,创建 DomainServiceContext 与供应商和正确的 DomainOperationType IPrincipal 向服务提供商提供服务,然后运行 Submit() ChangeSet . 这似乎很管用。

    但是,我无法测试查询调用。这些都是通过 Query() 服务上的方法。所以我和其他人做同样的准备工作(创建 IServiceProvider服务器 我的原则 DomainOperationEntry QueryDescription 查询() . 不幸的是,我还没有在这方面有任何运气。相关代码为:

    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 ,何时 需要身份验证 GetUsers 查询。但是,不管是否设置了属性,我什么也得不到。使用在上设置了断点的调试器 获取用户 方法我可以看到这个方法从来没有被调用过。我猜我已经拿到了 operationName

    有人对此有什么见解吗?我已经搜索了整个MSDN和谷歌搜索和搜索这里广泛。到目前为止我什么都没有。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Nikhil Kothari    15 年前

    我认为在单元测试授权时要做两件事:

    首先,检查是否应用了正确的规则。你不必为此执行规则。反射告诉您是否应用了正确的规则。这是规则以声明方式应用的副产品。更具体地说,您将对DomainService类型使用反射-DomainServiceDescription之上和之外的更高级别API。

    接下来,测试规则执行它应该执行的操作。为此,创建IPrincipal的模拟实现和AuthorizationContext,并调用AuthorizationAttribute的IsAuthorized方法(其中每个属性对应于要进行单元测试的规则)。

    希望有帮助。

    推荐文章