单元测试Sharepoint对象UserProfileManager

时间:2012-02-17 14:07:12

标签: visual-studio-2010 unit-testing sharepoint-2010 typemock

我在这里开车疯了,我得到了这个例外。我正在使用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。我做错了什么?

1 个答案:

答案 0 :(得分:0)

该行:

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

错了!您需要指定一个方法才能使其工作,例如:

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

您无法告诉它仅从该实例上的特定方法返回假实例中的值。