我创建了一个MovieRepository
,它包含GetByld
方法,该方法按其ID返回电影
public Movie GetById(int id)
{
// return context.Movies.SingleOrDefault(q=>q.Id == id);
return context.Movies.Find(id);
}
如您所见,我已经使用Find(id)返回
我已经为MovieRepository
创建了一个测试并模拟了数据
public void GetAll_MovieExist_ReturnTrue()
{
//Arrange
IQueryable<Movie> movies = new List<Movie>() {
new Movie
{
Name="Interstellar",
Language="En",
Score=9.2,
Director="christopher nolan",
},new Movie
{
Name="Apocalypto",
Language="En",
Score=8.3,
Director="Mel Gibson"
},new Movie
{
Name="The Green Mile",
Language="En",
Score=9.6,
Director="Frank Darabont"
},new Movie
{
Name="shutter island",
Language="En",
Score=9.1,
Director="Martin Scorsese"
}
}.AsQueryable();
var mockSet = new Mock<DbSet<Movie>>();
mockSet.As<IQueryable<Movie>>().Setup(m => m.Provider).Returns(movies.Provider);
mockSet.As<IQueryable<Movie>>().Setup(m => m.Expression).Returns(movies.Expression);
mockSet.As<IQueryable<Movie>>().Setup(m => m.ElementType).Returns(movies.ElementType);
mockSet.As<IQueryable<Movie>>().Setup(m => m.GetEnumerator()).Returns(movies.GetEnumerator());
var mockContext = new Mock<DataBaseContext>();
mockContext.Setup(c => c.Movies).Returns(mockSet.Object);
//Act
var repository = new MovieRepository(mockContext.Object);
var actual = repository.GetAll().ToList();
//Assert
Assert.AreEqual(4, actual.Count);
}
运行测试后,我遇到“对象引用未设置为对象实例”的错误,因为当我将Find(id)更改为GetByld
方法的结果时,会使用它返回“返回context.Movies.SingleOrDefault(q=>q.ld==id”)
,测试可以顺利进行。
我的问题是在这种情况下如何正确使用Find()