Универсальный репозиторий C #, используемый для модульного тестирования - PullRequest
2 голосов
/ 18 ноября 2010

У меня есть следующий поддельный репозиторий, который я использую для модульного тестирования.Как реализовать метод Attach (T entity) в этом хранилище?

(В моем реальном хранилище метод Attach (T entity) используется для присоединения объекта к моему контексту данных Entity Framework 4).

public class FakeRepository<T> : IRepository<T> where T : class, new()
{
    private static List<T> entities = new List<T>();

    public IQueryable<T> Entities
    {
        get { return entities.AsQueryable(); }
    }

    public T New()
    {
        return new T();
    }

    public void Create(T entity)
    {
        entities.Add(entity);
    }

    public void Delete(T entity)
    {
        entities.Remove(entity);
    }

    public void Attach(T entity)
    {
        //How to implement Attach???
    }

    public void Save()
    {
        //Do nothing
    }

    public void Dispose()
    {
        return;
    }
}

Ответы [ 2 ]

2 голосов
/ 18 ноября 2010

Чтобы ответить на этот вопрос, вы должны спросить себя: «Какова цель» Attach? «Вы, вероятно, знаете, что смысл сообщить хранилищу», что этот объект сохраняется в базе данных, но вы в настоящее время не отслеживаете Это; Я обновил его и хочу, чтобы вы зафиксировали его, когда я скажу вам отправить ваши изменения. "

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

Итак, самая простая реализация будет

entities.Add(entity);

но вы могли бы рассмотреть что-то более мелкозернистое. Обратите внимание, что вам нужно предоставить метод, который позволит вам утверждать, что объект был успешно присоединен (в EF4 вы можете использовать ObjectStateManager.TryGetObjectStateEntry).

1 голос
/ 18 ноября 2010

избавиться от статического слова на элементе лица.Теперь просто сделайте

enitities.Add(entity)
...