我正在尝试创建一个模拟版本的UserProfileManager,以便有效地对Sharepoint 2010 Web部件进行单元测试 每次运行此代码时,我都会得到下面抛出的异常。我已经验证了当我调试在Sharepoint机器上调用UserProfileManager的代码时该功能正常工作 - 实际上是两台不同的Sharepoint机器。 以下是有问题的代码:
var _mockServiceContext = Mock.Create<SPServiceContext>();
var _mockUserProfileManager = Mock.Create<UserProfileManager>(new object[] {_mockServiceContext});
Unable to create instance of class SharePoint.MyWebPartTest. Error: Microsoft.SharePoint.SPException: The trial period for this product has expired..
at Microsoft.Office.Server.UserProfiles.ProfileManagerBase.ValidateLicensing()
at Microsoft.Office.Server.UserProfiles.ProfileManagerBase..ctor(SPServiceContext serviceContext)
at Microsoft.Office.Server.UserProfiles.ProfileManagerBase..ctor(SPServiceContext serviceContext, Boolean ignorePrivacy)
at Microsoft.Office.Server.UserProfiles.UserProfileManager..ctor(SPServiceContext serviceContext, Boolean IgnoreUserPrivacy, Boolean backwardCompatible)
at Microsoft.Office.Server.UserProfiles.UserProfileManager..ctor(SPServiceContext serviceContext)
at Castle.Proxies.UserProfileManagerProxy..ctor(IEventsMixin, IMockReplicator, IMockMixin, IInterceptor[], SPServiceContext)
at DynamicMethod_6f2d60ffa4f94cb4ba57556150461ef9(Object[])
at ...()
at ..[](Func`1 )
at ..(Type , Object[] )
at ..(Type , List`1 , Type , Object[] )
at ..(Type , Type[] , ProxyGenerationOptions , Object[] , IInterceptor[] )
at Telerik.JustMock.Core.MocksRepository.Create(Type , Object[] , IEnumerable`1 , IEnumerable`1 , IEnumerable`1 , Type[] , Boolean , Boolean , IEnumerable`1 )
at ..Create(MocksRepository , Type , Object[] , Nullable`1 , Type[] , Nullable`1 , IEnumerable`1 , List`1 , List`1 , List`1 )
at Telerik.JustMock.Mock..()
at ..[](Func`1 )
at Telerik.JustMock.Mock.Create(Object[] args)
还有其他人看过这个问题吗?
答案 0 :(得分:0)
完全披露:我是JustMock团队的开发人员。
当你调用Mock.Create<T>(object[] args)
重载时,你基本上说你想要一个松散的模拟,但你仍然希望运行模拟类型的构造函数。从堆栈跟踪我看到它实际上是抛出异常的构造函数。那是你真正想要的吗?因为那很少有用。
如果你需要一个真正的松散模拟,最好绕过它的构造函数。基本上,使用Mock.Create<T>()
重载,如下所示:
var _mockUserProfileManager = Mock.Create<UserProfileManager>();