我在这里开车疯了,我得到了这个例外。我正在使用Typemock Isolator和Nunit对Sharepoint 2010项目进行单元测试。我想要模拟的是UserProfileManager的UserProfile集合。
要测试的代码:
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。我做错了什么?
答案 0 :(得分:0)
该行:
Isolate.WhenCalled(() => fakeUserProfileManager).WillReturnCollectionValuesOf(new[] {fakeUserProfile, fakeUserProfile, fakeUserProfile});
错了!您需要指定一个方法才能使其工作,例如:
Isolate.WhenCalled(() => fakeUserProfileManager.SomeMethod()).WillReturnCollectionValuesOf
您无法告诉它仅从该实例上的特定方法返回假实例中的值。