Насмешка членства

ArrayLists используют массивы для хранения данных. Когда количество элементов превышает выделенный массив, он копирует данные в другой массив, возможно, в два раза больше.

При копировании массива (незначительное) снижение производительности происходит, поэтому можно установить размер внутреннего массива в конструкторе списка массивов.

Кроме того, он реализует java.util.Collection и и java.util.list, и поэтому возможно получить элемент по указанному индексу, и итеративный (как массив).

9
задан Rob Abernethy 8 June 2009 в 20:21
поделиться

3 ответа

Не могли бы вы внедрить экземпляр MembershipProvider в свой провайдер профиля и, если он не введен, вернуться к использованию Membership.Provider ?

public MembershipProvider MembershipProvider
{
    get { return _membershipProvider ?? Membership.Provider; }
    set { _membershipProvider = value; }
}

Ваш поставщик профиля будет взаимодействовать с поставщиком членства через значение, возвращаемое этим свойством. В свой тест вы должны внедрить экземпляр fake / mock MembershipProvider .

Если вместо этого вы хотите просто имитировать статические методы в членстве, вам придется использовать что-то вроде TypeMock ], Наверное.

4
ответ дан 4 December 2019 в 20:24
поделиться

В ASP.NET MVC эта проблема решена путем инкапсуляции (упаковки) функций членства в MebershipService. Которые (например, с помощью инъекции) вы можете затем легко смоделировать в своих тестах.

Пример имитирующих служб ... http://www.asp.net/learn/mvc/tutorial-30-cs .aspx они не используют инъекцию

Хорошим примером является фактически тестовый проект, созданный при создании приложения ASP.NET. В следующем коде вы можете увидеть, как они имитируют объекты FormsAuthentication и Membership:

    [TestMethod]
    public void ConstructorSetsProperties()
    {
        // Arrange
        IFormsAuthentication formsAuth = new MockFormsAuthenticationService();
        IMembershipService membershipService = new AccountMembershipService();

        // Act
        AccountController controller = new AccountController(formsAuth, membershipService);

        // Assert
        Assert.AreEqual(formsAuth, controller.FormsAuth, "FormsAuth property did not match.");
        Assert.AreEqual(membershipService, controller.MembershipService, "MembershipService property did not match.");
    }
1
ответ дан 4 December 2019 в 20:24
поделиться

Я тоже сталкиваюсь с этой проблемой

, проблема заключается в том, что метод GetUser () без параметров реализован как статический метод в классе.

Принимая во внимание, что Membership.Provider (когда насмехается) не содержит метода GetUser () без параметров.

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

public interface IStaticMembershipService
{
    MembershipUser GetUser();

    void UpdateUser(MembershipUser user);
}

public class StaticMembershipService : IStaticMembershipService
{
    public System.Web.Security.MembershipUser GetUser()
    {
        return Membership.GetUser();
    }

    public void UpdateUser(MembershipUser user)
    {
        Membership.UpdateUser(user);
    }       
}
6
ответ дан 4 December 2019 в 20:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: