2010-03-11 20 views
5

Tôi đang cố gắng tạo một HttpContextBase giả cho thử nghiệm đơn vị.StrongNameKeyPair vấn đề khi cố gắng sử dụng MoQ

var fakePrinciple = new GenericPrincipal(
      new GenericIdentity(userId), 
      rolesList.ToArray());    
var mockHttpContext = new Mock<HttpContextBase>(); 
mockHttpContext.Setup(t => t.User).Returns(fakePrinciple); 
HttpContextBase mockedContext = mockHttpContext.Object; 

Các đơn vị kiểm tra thất bại tại báo cáo kết quả cuối cùng với

ném ngoại lệ: System.ArgumentException: Không thể lấy khóa công khai cho StrongNameKeyPair ..

System.Reflection.StrongNameKeyPair .nGetPublicKey (Boolean xuất, mảng Byte [], Chuỗi vùng chứa) System.Reflection.StrongNameKeyPair.get_PublicKey() System.AppDomain.InternalDefineDynamicAssembly (AssemblyName tên, truy cập AssemblyBuilderAccess, Chuỗi dir, bằng chứng chứng, PermissionSet requiredPermissions, PermissionSet optionalPermissions, PermissionSet refusedPermissions, StackCrawlMark & stackMark, IEnumerable`1 unsafeAssemblyAttributes) System.AppDomain. DefineDynamicAssembly (AssemblyName tên, AssemblyBuilderTruy cập truy cập) Castle.DynamicProxy.ModuleScope.CreateModule (Boolean signStrongName) Castle.DynamicProxy.ModuleScope.ObtainDynamicModuleWithStrongNam e() Castle.DynamicProxy.ModuleScope.ObtainDynamicModule (Boolean isStrongNamed) Castle.DynamicProxy.Generators.Emitters.ClassEmitter.CreateTypeBuilder (ModuleScope modulescope, String name, Loại (blah blah snip)

tôi googled và các đề xuất ở đây dường như không hoạt động (thay đổi cài đặt bảo mật thư mục RSA, v.v.) http://groups.google.com.br/group/castle-project-users/browse_thread/thread/85685cf32a795158

Tôi có thể nghĩ rằng vì HttpContextBase là một phần được ký kết. Moq sẽ thực sự cố gắng ký hợp đồng năng động, và thất bại?

+0

FWIW, tôi đã sử dụng Moq để thử HttpContextBase rất nhiều lần và không bao giờ có vấn đề đó.Dù vấn đề của bạn là gì, nó không phải là chung cho sự kết hợp của Moq và HttpContextBase. –

+0

Bí quyết là quyền cần phải được đặt trên thư mục MachineKeys chứ không phải RSA. Bài đăng từ Ayende không làm cho điều này hoàn toàn rõ ràng nếu bạn không phải là người đọc cẩn thận. –

+0

Rất vui vì tôi đã tìm thấy điều này, ugh, hai ngày và cuối cùng là cố định: D. Chỉ muốn thêm một số tài liệu tham khảo khác đã giúp tôi, trong trường hợp bất kỳ ai khác thực hiện điều này: http://ansaurus.com/question/3154345-strong-name-keys-on-windows-7 | http://msdn.microsoft.com/en-us/library/bb909654(v=vs.90).aspx thực sự đã giúp tôi khắc phục sự cố đã hiệu quả đối với tôi. –

Trả lời

9

MoQ sử dụng Castle DynamicProxy để tạo mocks khi chạy. Rhino Mocks sử dụng cùng một thư viện cho cùng một mục đích. Nếu bạn đánh dấu vào đây:

http://ayende.com/Blog/archive/2006/06/09/UnableToObtainPublicKeyForStrongNameKeyPair.aspx

bạn sẽ thấy rằng vấn đề này là một trong những quyền truy cập vào máy cửa hàng chủ chốt. Bất kỳ tài khoản người dùng nào đang chạy thử nghiệm phải có quyền tạo và xóa khóa trong cửa hàng.

Bạn có thể tìm thấy nhiều chi tiết hơn về vấn đề này ở đây: http://groups.google.co.uk/group/RhinoMocks/browse_thread/thread/26df68ff01567509/5ddebf407228edc4

+0

Tôi đã kiểm tra các quyền trên thư mục RSA và Crypto nhưng bằng cách nào đó nó không được đặt cho Khóa máy. Cảm ơn Will. –

+0

Đó là bởi vì nó là thư mục MachineKeys quan trọng và nó không kế thừa quyền! –

0

Kiểm tra this blog post bởi Scott Hanselman - nó hơi cũ, nhưng MvcMockHelpers anh ấy hiển thị ở đó có thể sẽ cung cấp cho bạn ý tưởng hay về cách hoàn thành những gì bạn đang làm.

-1

Bạn nên xem trang web this video on asp.net đang hiển thị ví dụ tuyệt vời về triển khai.

+2

Việc đăng nhập là vấn đề ở đây, không phải là cách giả lập trong mvc. – Will

+0

ok đã đồng ý lỗi của tôi –