我正在爲我們的WCF RIA服務進行單元測試,這些服務有RequiresRole
或RequiresAuthentication
屬性附加到它們。我已經能夠測試更新,插入和刪除方法,以確保正確設置屬性。這是通過嘲笑IServiceProvider
,與該提供商和正確的DomainOperationType
創建DomainServiceContext
,向服務提供商添加IPrincipal
服務,然後在適當的ChangeSet
上運行Submit()
服務。這似乎運作良好。如何編寫單元測試來驗證WCF-RIA服務的DomainService查詢方法是否需要驗證?
但是,我一直無法測試查詢調用。這些通過服務上的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搜索並在這裏進行了廣泛搜索。到目前爲止,我一無所獲。
首先,感謝您的回覆。我實際上剛開始做第一次測試...從此以後就沒有在這裏檢查過。其次,我不清楚如何做第二個。作爲一個例子,我應該測試一下,當IPrincipal具有正確的角色時,通過AuthorizationContext將RequiresRole應用於IPrincipal會有效嗎?顯然,我會測試一個自定義的授權規則,因爲我認爲RequiresRole確實有效:)換句話說,測試授權規則。 – 2010-07-23 14:02:38