Почему у меня проблема с миграцией в модульном тесте, а не в контроллере c # Web API - PullRequest
0 голосов
/ 05 декабря 2018

Здравствуйте, у меня есть веб-API проекта в C #, и я хочу написать модульный тест для проверки моего контроллера.Но я нахожу ошибку, которую я действительно не понимаю.Когда я запускаю свой метод в контроллере

  public class TherapistsController : ApiController
        {
            TherapistService _therapistService = new TherapistService();
            GeneralService _generalService = new GeneralService();
            //GET: api/Therapists/GetAllTherapists
            [HttpGet]
            [Route("api/Therapists/GetAllTherapists")]
            public IHttpActionResult GetTherapist()
            {
                var therapists = _therapistService.GetAllTherapist();
                if (therapists.Count() > 0)
                    return Ok(therapists);
                return NotFound();
            }
    }

, он дает мне результат, и это нормально enter image description here

Но если я запускаю этот метод в модульном тесте

 [TestClass]
    public class UnitTest1
    {

        [TestMethod]
        public void GetAllTherapistByOutletTest()
        {
            var therapists = new WebAPI.Controllers.TherapistsController();

            IHttpActionResult result    = therapists.GetTherapist();

            Assert.IsInstanceOfType(result, typeof(OkResult));

        }
    }

это дает мне ошибку

enter image description here

Как вы видите, ошибка говорит, что мне нужно обновить базу данных путем миграции, ноЭто все еще дает мне ту же ошибку после того, как я перенести и обновить базу данных.Но когда я запускаю метод, вызывая API, он все равно дает мне результат, как на первом рисунке, и без ошибок.Я отлаживаю оба пути, и у них одинаковые шаги, пока метод getAll() в хранилище не будет, как вы видите на картинке выше.Я действительно не знаю, что не так?

Репозиторий

  public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : class
    {
        protected readonly SpaDbContext db;
        public GenericRepository(SpaDbContext _db)
        {
            this.db = _db;
        }
        public void Add(TEntity entity)
        {
            db.Set<TEntity>().Add(entity);
        }

        public void AddRange(IEnumerable<TEntity> entities)
        {
            db.Set<TEntity>().AddRange(entities);
        }

        public void Detached(TEntity entity)
        {
            db.Entry<TEntity>(entity).State = EntityState.Detached;
        }

        public IEnumerable<TEntity> Find(Expression<Func<TEntity, bool>> predicate)
        {
            return db.Set<TEntity>().Where(predicate);
        }


        public TEntity Get(Expression<Func<TEntity, bool>> predicate)
        {
            return db.Set<TEntity>().FirstOrDefault(predicate);
        }

        public TEntity Get(object Id)
        {
            return db.Set<TEntity>().Find(Id);
        }

        public IEnumerable<TEntity> GetAll()
        {
            return db.Set<TEntity>().ToList();
        }

        public void Remove(TEntity entity)
        {
            db.Set<TEntity>().Remove(entity);
        }

IRepository

namespace Repository
{
    public interface IGenericRepository<TEntity> where TEntity : class
    {
        IEnumerable<TEntity> GetAll();
        IEnumerable<TEntity> Find(Expression<Func<TEntity, bool>> predicate);
        TEntity Get(Expression<Func<TEntity, bool>> predicate);
        TEntity Get(object Id);
        void Add(TEntity entity);
        void AddRange(IEnumerable<TEntity> entities);
        void Update(TEntity entity);

        //void Remove(object Id);
        void Remove(TEntity entity);
        void RemoveRange(IEnumerable<TEntity> entities);

        void Detached(TEntity entity);

        IEnumerable<TEntity> GetByQuery(string query);
    }
}

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Если вы хотите провести реальный модульный тест с использованием методов контроллера, которые вам необходимы, используйте службы Mock, с этим у вас не возникнет подобных проблем

https://docs.microsoft.com/en-us/aspnet/web-api/overview/testing-and-debugging/unit-testing-controllers-in-web-api

0 голосов
/ 05 декабря 2018

Убедитесь, что вы указали допустимую строку подключения в тестовом проекте как проект web api

...