Я использую 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