Как использовать усилие в сочетании с генератором обратного Poco - PullRequest
0 голосов
/ 13 марта 2019

Итак, я Visual Studio 2017, EF6, и я использую этот шаблон T4 https://marketplace.visualstudio.com/items?itemName=SimonHughes.EntityFrameworkReversePOCOGenerator для создания моего класса контекста

Будучи большим поклонником тестирования, у меня уже есть 100% охват модульными тестами, но теперь я хочу провести интеграционные тесты, где я могу вызвать несколько частей моей системы и пройти через изменения - но, конечно, я хочу сделать это не касаясь реальной дисковой БД.

Так что после поиска я нашел Усилие https://entityframework -effort.net / и для меня это выглядит как раз то, что я хочу использовать. Где я могу создать базу данных, которая находится в памяти, заполнить ее любыми нужными приборами и затем вызвать несколько методов из разных частей моей системы. Однако, я пытаюсь выяснить, как заставить это работать в моей ситуации. Я пробовал DBConnectionFactory, EntityConnectionFactory, ObjectConnectionFactory и каждый раз, когда я получаю сообщение об ошибке: -

«EffortException: база данных не была инициализирована».

это кодовый блок, который я использую в своей настройке: -

   var newsCtx = Effort.DbConnectionFactory.CreatePersistent("2");
   _newsEntities = new NewsEntities(newsCtx);
   _newsEntities.Database.CreateIfNotExists();
   _newsEntities.Channels.Add(new Channel
   {
            Id = 1,
            Title = "Convenience Store - ",
            Link = "https://www.conveniencestore.co.uk/XmlServers/navsectionRSS.aspx?navsectioncode=123",
            Description = "https://www.conveniencestore.co.uk",
            Image = "https://www.conveniencestore.co.uk/magazine/dest/graphics/logo/logo.png",
            PublishedAt = null,
            UpdatedAt = DateTime.Now.AddDays(-2),
            Enabled = true,
            Type = "Rss_2_0",
            Author = null,
            Category = null,
            Copyright = null,
            Generator = null
   });
   _newsEntities.SaveChanges();

Когда я добираюсь до saveChanges, я получаю исключение, которое предполагает, что я добавляю .CreateIfNotExists (), что я уже сделал, однако, я все еще получаю ошибку. Я могу увидеть образцы и примеры по различным ссылкам, где это работает ... однако я не хочу отказываться от своего шаблона t4, поскольку он дает мне именно то, что я хочу.

Я немного растерялся, и мне интересно, кто-нибудь использовал генератор обратного poco, который создает контекст, и использовал его в сочетании с усилием. Я хотел бы использовать оба, и если кто-то может дать мне указатель, чтобы я мог получить достойные интеграционные тесты, работающие с БД в памяти, я был бы так же счастлив, как сэндбой

С уважением, Джулиан

это сгенерированный метод в Poco из шаблона t4

    public NewsEntities(System.Data.Common.DbConnection existingConnection)
        : base(existingConnection, true)
    {
        this.Database.Connection.Open();
    }

1 Ответ

1 голос
/ 13 марта 2019

Хорошо, поэтому, просмотрев https://www.stevefenton.co.uk/2015/11/using-an-in-memory-database-as-a-test-double-with-entity-framework/ эту ссылку, я задался вопросом о том, как ведет себя мой генератор обратного poco в методах, которые были у меня внутри метода

this.Database.Connection.Open ();

это вызывало проблему .... удаление этой строки из генератора .ttinclude poco позволило запустить Effort. Почему это было там, я понятия не имею, и удаление этого, похоже, не дает эффекта.

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

...