2012-10-09 25 views
6

Tôi có mã thư viện có thể được gọi từ nhiều loại khách hàng như WinForms, Console, ASP.NET vv ... và cần xác định hiệu trưởng hiện tại. Bằng cách đó tôi đang thực hiện một kiểm tra hai bước của Thread.CurrentPrincipal và sau đó Environment.UserName như sau:Làm thế nào để thiết lập lại Thread.CurrentPrincipal để unauthenticated trong một bài kiểm tra đơn vị

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

trong một điều khiển ứng dụng Thread.CurrentPrincipal.Identity.IsAuthenticated luôn là sai howerver trong MSTest nó luôn luôn có một người dùng đã được xác thực hợp lệ.

Có cách nào để đặt lại giá trị của Thread.CurrentPrincipal trong thử nghiệm đơn vị thành chưa được xác thực để bắt chước ứng dụng Console không?

Trả lời

11

Tất cả bạn cần làm là:

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

Tôi thà tạo ra một lớp mà thực hiện tất cả các công tác quản lý CurrentPrincipal với giao diện thích hợp của nó và có được giao diện đó tiêm nơi bạn cần đến nó.

Sau đó, bạn có thể thử nó trong các bài kiểm tra đơn vị làm cho chúng đơn giản hơn.

Các vấn đề liên quan