2

私はこの例外で私を夢中にしています。私はTypemock IsolatorとNunitでSharepoint 2010プロジェクトをテストしています。私が嘲笑しようとしているのは、UserProfileManagerのUserProfileコレクションです。テストへユニットテストSharepointオブジェクトUserProfileManager

コード:

public void IterateUsers() 
    { 
     SPServiceContext context = SPServiceContext.GetContext(site); 
      if (profileManager == null) 
      { 
       profileManager = new UserProfileManager(context); 
      } 

      foreach (UserProfile profile in profileManager) 
      { 
       DoThingsThatAreNotRelevant(); 
      } 

     } 
    } 

そして、私のテストコード:

[Test] 
public void IterateUsersTest() 
{ 
    //SPSite 
    var fakeSite = Isolate.Fake.Instance<SPSite>(Members.ReturnRecursiveFakes); 
    Isolate.Swap.NextInstance<SPSite>().With(fakeSite); 

    //SPServiceContext 
    var fakeSPServiceContext = Isolate.Fake.Instance<SPServiceContext> (Members.ReturnRecursiveFakes); 
    Isolate.WhenCalled(() => SPServiceContext.GetContext(fakeSite)).WillReturn(fakeSPServiceContext); 

    //UserProfileManager 
    var fakeUserProfileManager = Isolate.Fake.Instance<UserProfileManager>(Members.ReturnRecursiveFakes); 
    Isolate.Swap.NextInstance<UserProfileManager>().With(fakeUserProfileManager); 

    //UserProfile 
    var fakeUserProfile = Isolate.Fake.Instance<UserProfile>(Members.ReturnRecursiveFakes); 
    Isolate.Swap.NextInstance<UserProfile>().With(fakeUserProfile); 

    Isolate.WhenCalled(() => fakeUserProfileManager).WillReturnCollectionValuesOf(new[] {fakeUserProfile, fakeUserProfile, fakeUserProfile}); 
} 

だから、私の計画は、私は、foreachループを繰り返し処理できるようfakeUserProfileのコレクションを返すようにUserProfileManagerに模擬することです。 fakeUserProfileの内容は本当に重要ではありません。なぜなら、私はこの問題を問題なく模擬できるからです。

ことは、それがこのライン

Isolate.WhenCalled(() => fakeUserProfileManager).WillReturnCollectionValuesOf(new[] {fakeUserProfile, fakeUserProfile, fakeUserProfile}); 

を実行しようとしたとき、私は素敵な例外ArgumentOutOfRangeExceptionを得ること、です。私は間違っているの?

+0

[docs](http://docs.typemock.com/isolator/##typemock.chm/Documentation/ReplacingCollectionsAAA.html)によると、やり方は正しいようです。たぶんあなたはそれを作成する方法に問題があります。私はアイソレータを一度も使用していないので、私は助けることができないのではないかと思います。タグを固定すると、適切な人々の注目を集める可能性があります。 –

答えて

0

ライン:

Isolate.WhenCalled(() => fakeUserProfileManager).WillReturnCollectionValuesOf(new[] {fakeUserProfile, fakeUserProfile, fakeUserProfile}); 

が間違っています!あなたはそれが例のために働くようにするために方法を指定する必要があります。

Isolate.WhenCalled(() => fakeUserProfileManager.SomeMethod()).WillReturnCollectionValuesOf 

あなたはそのインスタンスのみに特定のメソッドから偽のインスタンスから値を返すために、それを伝えることはできません。

+0

私も、その行がドキュメントのものとまったく同じだと思ったので、これを試しました: > Isolate.WhenCalled(()=> fakeUserProfileManager.GetEnumerator())。WillReturnCollectionValuesOf(new []) {fakeUserProfile、fakeUserProfile、fakeUserProfile}); 異なる例外が発生しましたが、それでもなお動作しません。 >メソッドMicrosoft.Office.Server.UserProfiles.ProfileManagerBase.GetEnumeratorはSystem.Collections.IEnumeratorを返します。列挙型に対してのみWillReturnCollectionValuesOf()を使用できます。 –

+0

奇数 - このエラーは、WillReturnCollectionValueOfの代わりにWillReturnを使用すると作成されるエラーです。 Typemockのサポートは次のとおりです。 –

関連する問題