单元测试返回空值

时间:2019-07-24 05:14:06

标签: asp.net-mvc linq mocking

我创建了一个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()

0 个答案:

没有答案