Mocking EF core dbcontext и dbset

eval () не работал в моих тестах. Но добавление нового кода JavaScript в дерево DOM возможно. Итак, вот функция, которая добавляет новую переменную:

function createVariable(varName,varContent)
{
  var scriptStr = "var "+varName+"= \""+varContent+"\""

  var node_scriptCode = document.createTextNode( scriptStr )
  var node_script = document.createElement("script");
  node_script.type = "text/javascript"
  node_script.appendChild(node_scriptCode);

  var node_head = document.getElementsByTagName("head")[0]
  node_head.appendChild(node_script);
}

createVariable("dynamicVar", "some content")
console.log(dynamicVar)
3
задан TanvirArjel 16 January 2019 в 15:28
поделиться

2 ответа

Ошибка, которую вы получаете, заключается в том, что вам нужно объявить свойство Movies в вашем dbcontext как Virtual.

Как кто-то указал в комментариях, вы должны использовать встроенный в EF поставщик памяти для тестирования.

0
ответ дан Michael Brown 16 January 2019 в 15:28
поделиться

Я вижу, что вы используете EF core DbContext в вашем MovieRepository. Поэтому вместо использования mock, база данных EF Core InMemory будет для вас отличным вариантом. Это также уменьшит сложность.

Напишите ваш метод GetAllTest() следующим образом:

[Fact]
public void GetAllTest()
{
        var options = new DbContextOptionsBuilder<MovieDbContext>()
            .UseInMemoryDatabase(databaseName: "MovieListDatabase")
            .Options;

        // Insert seed data into the database using one instance of the context
        using (var context = new MovieDbContext(options))
        {
            context.Movies.Add(new Movie {Id = 1, Title = "Movie 1", YearOfRelease = 2018, Genre = "Action"});
            context.Movies.Add(new Movie {Id = 2, Title = "Movie 2", YearOfRelease = 2018, Genre = "Action"});
            context.Movies.Add(nnew Movie {Id = 3, Title = "Movie 3", YearOfRelease = 2019, Genre = "Action"});
            context.SaveChanges();
        }

        // Use a clean instance of the context to run the test
        using (var context = new MovieDbContext(options))
        {
            MovieRepository movieRepository = new MovieRepository(context);
            List<Movies> movies == movieRepository.GetAll()

            Assert.Equal(3, movies.Count);
        }
}

Примечание. Не забудьте установить пакет Microsoft.EntityFrameworkCore.InMemory nuget следующим образом:

Install-Package Microsoft .EntityFrameworkCore.InMemory

Для получения дополнительной информации: Тестирование с InMemory

0
ответ дан TanvirArjel 16 January 2019 в 15:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: