2012-10-09 9 views
6

WinForms、Console、ASP.NETなどの複数のクライアントタイプから呼び出され、現在のプリンシパルを判別する必要があるライブラリコードがあります。コンソールアプリThread.CurrentPrincipal.Identity.IsAuthenticatedで 単体テストでThread.CurrentPrincipalをunauthenticatedにリセットする方法

var currentUser = !System.Threading.Thread.CurrentPrincipal.Identity.IsAuthenticated ? null : System.Threading.Thread.CurrentPrincipal.Identity.Name; 
if (string.IsNullOrWhiteSpace(currentUser)) 
{ 
    currentUser = Environment.UserName; 
} 

は常にそれが常に持っているhowerver MSTestをして偽です:次のようにそうすることで私は2つのステップのThread.CurrentPrincipalのチェック、その後Environment.UserNameを行っております有効な認証済みユーザー。

Consoleアプリケーションを模倣するためにユニットテストのThread.CurrentPrincipalの値をunauthenticatedにリセットする必要はありますか?

答えて

11

すべてを行う必要がある:

Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(""), new string[0]); 
0

私はむしろその適切なインターフェイスですべてのCurrentPrincipal管理を実装するクラスを作成し、あなたがそれを必要とするインタフェース注入さになるだろう。

ユニットテストでそれを模擬して簡単にすることができます。

関連する問題