EF, DAL фасад и модульное тестирование - PullRequest
4 голосов
/ 07 июня 2011

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

Теперь один из моих коллег говорит, что я должен проводить модульное тестирование каждого метода, даже если они содержат один вызов, и, на мой взгляд, это звучит слишком радикально, для меня это похоже на вздор, правда?

Здесь нет реального случая для тестирования, кроме тестирования параметров, которые я уже делаю, я не вижу причин для тестирования методов, которые не имеют никакой структуры управления.

Каково ваше мнение?

/// <summary> Adds the entity to the context. </summary>
    /// <param name="entity"> The entity to add. </param>
    public void Add(object entity)
    {
        var name = GetEntitySetName(entity);

        Context.AddObject(name, entity);
    }

    /// <summary> Updates the entity in the context with the given entity data; otherwise, attaches it to the context in attempt to update the related record in the data source on the next call to commit. </summary>
    /// <param name="entity"> The entity to use for the update. </param>
    public void Update(object entity)
    {
        var name = GetEntitySetName(entity);

        var manager = Context.ObjectStateManager;

        EntityKey key = Context.CreateEntityKey(name, entity);

        ObjectStateEntry entry;

        if (manager.TryGetObjectStateEntry(key, out entry))
        {
            entry.ApplyCurrentValues(entity);
        }
        else
        {
            Context.AttachTo(name, entity);

            manager.ChangeObjectState(entity, EntityState.Modified);
        }
    }

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

Итак, мой коллега говорит, что я должен протестировать этот метод "Add" как часть моего Uni Testing, и меня это сильно смущает, он утверждает, что каждый публичный метод требует юнит-теста.

На мой взгляд, это кажется радикальным, потому что это все равно что задавать вопрос, будет ли работать вызов .AddObject Entity Framework, что, я полагаю, будет.

Что я действительно хочу знать, так это то, будете ли вы тестировать метод, в котором нет управляющей структуры и который действительно необходим для тестирования вызовов сторонних библиотек? Я думаю, что нет.

1 Ответ

2 голосов
/ 07 июня 2011

Методы тестирования, охватывающие функции EF, - это не модульное тестирование, а интеграционное тестирование, и у него действительно есть причина, поскольку он проверяет, работает ли ваш DAL с реальной базой данных. Речь идет не о тестировании его параметров или о том, что происходит, а о том, что сопоставление работает с реальной базой данных, что записи действительно читаются или сохраняются и т. Д.

...