Модульное тестирование объекта Sharepoint UserProfileManager - PullRequest
2 голосов
/ 17 февраля 2012

Я схожу с ума здесь с этим исключением, которое я получаю. Я занимаюсь тестированием проекта Sharepoint 2010 с Typemock Isolator и Nunit. То, что я пытаюсь смутить, это коллекция UserProfile для 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. Что я делаю не так?

1 Ответ

0 голосов
/ 20 февраля 2012

Строка:

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

Неправильно!вам нужно указать метод, чтобы он работал, например:

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

Вы не можете сказать ему, чтобы он возвращал значение из поддельного экземпляра только из определенного метода в этом экземпляре.

...