0

Sharepoint 2010 Web パーツを効果的に単体テストするために、UserProfileManager のモック バージョンを作成しようとしています。このコードを実行するたびに、以下の例外がスローされます。Sharepoint マシン (実際には 2 つの異なる Sharepoint マシン) で UserProfileManager を呼び出すコードをデバッグすると、この機能が動作することを確認しました。問題のコードは次のとおりです。

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)

他の誰かがこの問題を見たことがありますか?

4

1 に答える 1

0

完全な開示: 私は JustMock チームの開発者です。

オーバーロードを呼び出すときはMock.Create<T>(object[] args)、基本的に、緩いモックが必要であるが、モックされた型のコンストラクターを実行したいということです。スタック トレースから、例外をスローするのは実際にはそのコンストラクタであることがわかります。それはあなたが本当に望んでいることですか?それはめったに役に立たないからです。

真の緩いモックが必要な場合は、そのコンストラクターをバイパスするのが最善です。基本的に、次のようにMock.Create<T>()オーバーロードを使用します。

var _mockUserProfileManager = Mock.Create<UserProfileManager>();
于 2013-08-14T08:20:57.003 に答える