c# – 如何使用自动修正创建和填充我的模拟类?

目前我正在使用EF6在UnitOfWork中实现我的存储库.我还创建了一个内存中的模拟实现(MockUnitOfWork& MockRepository),以便我可以在单元测试中使用它们,但是我现在必须处理对象繁琐的设置.

Autofixture的设计不是这样吗?我将如何获得一个MockUnitOfWork,我可以在我的测试中使用包含Foo和Barr仓库的库?我使用NSubstitute作为我的嘲笑框架.

IUnitOfWork

public interface IUnitOfWork
{
    void Save();
    void Commit();
    void Rollback();

    IRepository<Foo> FooRepository { get; }
    IRepository<Bar> BarRepository { get; }
}

IRepository

public interface IRepository<TEntity> where TEntity : class
{
    Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, string         includeProperties = "");

    IEnumerable<TEntity> Get(Expression<Func<TEntity, bool>> filter = null, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null);
    TEntity GetByID(object id);

    void Insert(TEntity entity);
    void Delete(object id);
    void Delete(TEntity entityToDelete);
    void Update(TEntity entityToUpdate);
}
你正在尝试在这里进行功能测试,所以有一个功能数据库是明智的.

EF可以使用测试连接字符串在您的设置和拆卸方法中重新创建和销毁数据库.这将为您的测试提供一个真正的功能测试环境,以反对模仿真实环境.

例如:

        [TestFixtureSetUp]
        public static void SetupFixture() //create database
        {
            using (var context = new XEntities())
            {
                context.Setup();
            }
        }

        [TestFixtureTearDown]
        public void TearDown() //drop database
        {
            using (var context = new XEntities())
            {
                context.Database.Delete();
            }
        }

        [SetUp]
        public void Setup() //Clear entities before each test so they are independent
        {
            using (var context = new XEntities())
            {
                foreach (var tableRow in context.Table)
                {
                    context.Table.Remove(tableRow);
                }
                context.SaveChanges();
            }
        }
翻译自:https://stackoverflow.com/questions/22342305/how-can-i-create-and-populate-my-mock-classes-with-autofixture

转载注明原文:c# – 如何使用自动修正创建和填充我的模拟类?