Entity Framework 4, MOQ, - PullRequest
       15

Entity Framework 4, MOQ,

1 голос
/ 29 октября 2010

Я использую EF4, Microsoft.Entity.CTP и последнюю версию MOQ.Я пытаюсь создать общий класс репозитория и moq DBContext с помощью MOQ.Всякий раз, когда я запускаю свой тест moq, я получаю «ссылка на объект, не установленная на экземпляр объекта» на this.context.Set (). Add (entity);и я не понимаю почему.Код работает нормально без moq.

public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : class
{
    private IContext context;

    public GenericRepository(IContext context)
    {
        this.context = context;
    }

    public IList<TEntity> List
    {
        get { return context.Set<TEntity>().ToList(); }
    }

    public void Create(TEntity entity)
    {
        this.context.Set<TEntity>().Add(entity);
        this.context.SaveChanges();
    }
}

var mock = new Mock<IContext>();
GenericRepository<Product> producRepository = new GenericRepository<Product>(mock.Object);

mock.Setup(x => x.Product.Add(productType));
mock.Setup(x => x.SaveChanges());

productRepository.Create(product);
mock.VerifyAll();

Ответы [ 2 ]

0 голосов
/ 29 июля 2012

Измените сначала ваш код определения с DbSet на IDbSet, а затем вы можете их издеваться.http://blogs.msdn.com/b/efdesign/archive/2010/06/21/productivity-improvements-for-the-entity-framework.aspx

Я рассматриваю вопрос об изменении моего файла DbContext.tt для генерации IDbSet вместо DbSet, но только после того, как я заставлю насмехаться.работа легкая, но она избавит вас от одной проблемы.В чем я нуждаюсь, так это в том, что делать после изменения первых определений кода на основе интерфейсов EF DbContext.Например, я создаю экземпляры своих объектов DbSet и добавляю их.

Mock<IPosManContext> posManContext;

posManContext.Object.Set(typeof(note_template));

posManContext.Object.note_template.Add(
    new note_template()
    {
        note_template_id = 1,
        act_flag = "Y",
        desc_text = "Monday Monday",
        last_update_dtm = now,
        last_update_user_id = "hsimpson",
    });

Но я получаю ошибку, что DbSet равен нулю.

Microsoft должна предоставить хороший пример того, чтоделать.Они прошли половину пути, предоставив публичные интерфейсы для насмешек, но мне все еще нужна дополнительная помощь.

Джо

0 голосов
/ 30 октября 2010

Вам нужно смоделировать реализацию списка за Set.Я не в вычислительном банкомате, но iirc - это IDbSet.

...