Издевательское ядро ​​EF dbcontext и dbsetC#

Место общения программистов C#
Anonymous
Издевательское ядро ​​EF dbcontext и dbset

Сообщение Anonymous »

Я использую ASP.NET Core 2.2, EF Core и MOQ. Когда я запускаю тест, я получаю эту ошибку:


Сообщение: System.NotSupportedException: неверная настройка на невиртуальном (переопределяемом в VB) ) участник: x => x.Movies


Что я делаю не так?

public class MovieRepositoryTest
{
private readonly MovieRepository _sut;

public MovieRepositoryTest()
{
var moviesMock = CreateDbSetMock(GetFakeListOfMovies());
var mockDbContext = new Mock();
mockDbContext.Setup(x => x.Movies).Returns(moviesMock.Object);
_sut = new MovieRepository(mockDbContext.Object);
}

[Fact]
public void GetAll_WhenCalled_ReturnsAllItems()
{
//Act
var items = _sut.GetAll();

//Assert
Assert.Equal(3, items.Count());
}

private IEnumerable GetFakeListOfMovies()
{
var movies = new List
{
new Movie {Id = 1, Title = "Movie 1", YearOfRelease = 2018, Genre = "Action"},
new Movie {Id = 2, Title = "Movie 2", YearOfRelease = 2018, Genre = "Action"},
new Movie {Id = 3, Title = "Movie 3", YearOfRelease = 2019, Genre = "Action"}
};

return movies;
}

private static Mock CreateDbSetMock(IEnumerable elements) where T : class
{
var elementsAsQueryable = elements.AsQueryable();
var dbSetMock = new Mock();

dbSetMock.As().Setup(m => m.Provider).Returns(elementsAsQueryable.Provider);
dbSetMock.As().Setup(m => m.Expression).Returns(elementsAsQueryable.Expression);
dbSetMock.As().Setup(m => m.ElementType).Returns(elementsAsQueryable.ElementType);
dbSetMock.As().Setup(m => m.GetEnumerator()).Returns(elementsAsQueryable.GetEnumerator());

return dbSetMock;
}
}


А это мой контекст БД с фильмом dbSet:

public class MovieDbContext: DbContext
{
public MovieDbContext(DbContextOptions options) : base(options)
{

}

public DbSet Movies { get; set; }
}


И репозиторий с методом GetAll для тестирования:

public class MovieRepository: IMovieRepository
{
private readonly MovieDbContext _moviesDbContext;
public MovieRepository(MovieDbContext moviesDbContext)
{
_moviesDbContext = moviesDbContext;
}

public IEnumerable GetAll()
{
return _moviesDbContext.Movies;
}
}


Подробнее здесь: https://stackoverflow.com/questions/542 ... -and-dbset

Вернуться в «C#»