2010-06-16 1 views
1

RequiresRole 또는 RequiresAuthentication 속성이 첨부 된 WCF RIA 서비스에 대한 단위 테스트를 수행하고 있습니다. 업데이트, 삽입 및 삭제 메서드를 테스트하여 특성이 올바르게 설정되었는지 확인할 수있었습니다. 이 작업은 IServiceProvider을 조롱하고 해당 공급자로 DomainServiceContext을 만들고 올바른 DomainOperationType을 만들고 서비스 공급자에게 IPrincipal 서비스를 추가 한 다음 해당 서비스에서 ChangeSet을 사용하여 Submit()을 실행하면됩니다. 이것은 잘 작동하는 것 같습니다.WCF-RIA Services DomainService 쿼리 메서드가 인증을 요구하는지 확인하기 위해 장치 테스트를 작성하는 방법은 무엇입니까?

그러나 쿼리 호출을 테스트 할 수 없었습니다. 이들은 서비스의 Query() 메소드를 통해 호출됩니다. 그래서 나는 다른 사람들과 마찬가지로 준비 작업을하고 있습니다 (IServiceProvider, DomainServiceContextIPrincipal). DomainOperationEntryQueryDescription을 생성하여 Query()으로 전달하려고합니다. 불행히도, 나는 아직 이걸 가지고 행운이 없다. 관련 코드는 다음과 같습니다 RequiresAuthenticationGetUsers 쿼리가 설정되어있는 경우는, UnauthorizedAccessException가 발생한다

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); 

. 그러나 속성이 설정되었는지 여부에 관계없이 아무 것도 얻지 못합니다. GetUsers 메서드에 설정된 중단 점이있는 디버거를 사용하면 해당 메서드가 호출되지 않을 수 있습니다. 내 생각 엔 operationName이 잘못되었습니다. 그러나 그게 문제인지, 그렇지 않으면 무엇을 변경해야하는지는 모르겠습니다.

누구에게도 통찰력이 있습니까? 나는 MSDN을 통해 모두 검색했고 Google 검색을 수행했으며 여기에서 광범위하게 검색했습니다. 나는 지금까지 아무 것도 없어.

첫째, 올바른 규칙이 적용되어 있는지 확인 :

답변

1

나는 경우 단위 테스트 인증을 수행하는 두 가지가 있다고 생각합니다. 이를 위해 규칙을 실행할 필요는 없습니다. Reflection은 올바른 규칙이 적용되었는지 알려줍니다. 규칙이 선언적으로 적용된다는 사실은 부산물입니다. 더 구체적으로 말하자면, DomainService 유형에 대해 Refresh DomainServiceDescription 이상의 높은 수준의 API를 사용합니다.

다음으로 규칙이 수행 할 작업을 테스트합니다. 이를 위해 IPrincipal 및 AuthorizationContext의 모의 구현을 만들고 AuthorizationAttribute의 IsAuthorized 메서드를 호출합니다. 여기서 각 특성은 단위 테스트 할 규칙에 해당합니다.

희망이 있습니다.

+0

먼저 응답 해 주셔서 감사합니다. 나는 실제로 처음 시험을하기 시작했다 ... 그 이후로 여기에서 체크하지 않았다. 둘째로, 저는 두 번째 방법을 정확히 어떻게하는지 명확하지 않습니다. 예를 들어, IPrincipal에 올바른 역할이있을 때 RequiresRole이 AuthorizationContext를 통해 IPrincipal에 적용되는지 테스트해야합니다. 분명히 RequiresRole이 제대로 작동한다고 가정하기 때문에 맞춤 인증 규칙을 테스트 할 것입니다. 즉, 인증 규칙을 테스트하십시오. –