我開着瘋狂在這裏,我得到了這個異常。我正在使用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});
}
所以,我的計劃是嘲笑UserProfileManager返回fakeUserProfile的集合,所以我可以通過foreach循環迭代。 fakeUserProfile的內容並不重要,因爲我可以嘲笑沒有問題的行爲。
的事情是,當它試圖執行此行
Isolate.WhenCalled(() => fakeUserProfileManager).WillReturnCollectionValuesOf(new[] {fakeUserProfile, fakeUserProfile, fakeUserProfile});
我得到一個不錯的ArgumentOutOfRangeException。我做錯了什麼?
根據[文檔](http://docs.typemock.com/isolator/##typemock.chm/Documentation/ReplacingCollectionsAAA.html),您的做法似乎是正確的。也許問題在於你創建它的方式。由於我從未使用過隔離器,所以恐怕我無法幫助。修復標籤,可能會引起人們的注意。 – 2012-02-17 14:38:11