Unit test case with automapper and microsfot fakes framework

97 views Asked by At

I am writing unit test case using microsoft fakes framework for below api code. I have created shim objects for MyQueryBuilder, GetMyFunctionDetails, Execute functions for the functions from my query builder class. But, I'm getting the following error at line return result.ToList()

Object reference not set to an instance of an object

The mapper is I guess failing to map the database entity to DTO. I am not sure how this can be handled. Any help would be great.

public IList<MyDTO> GetAPI(string ID, bool IsActive)
{
    using (var ctx = new DataContext())
    {
        var mapper = AutomapperBuilder.MyMapperFunction(ctx);
        MyQueryBuilder obj = new MyQueryBuilder(ctx);
        obj.GetMyFunctionDetails(id, true);
        List<DatabaseEntityObject> lst = new List<DatabaseEntityObject>();
        lst = obj.Execute().AsQueryable().ToList();
        var result = mapper.ProjectTo<MyDTO>(lst.AsQueryable());
        return result.ToList();
    }
}

Below is the unit test case

[TestMethod]
public void Test_ResultOk()
{
    using (ShimsContext.Create())
    {
        //Arrange                
        List<DatabaseEntityObject> lstTaskDetailsDTO = null;
        using (var ctx = new DataContext())
        {
            MyQueryBuilder objQueryBuilder = new MyQueryBuilder(ctx);
            ShimMyQueryBuilder.AllInstances.GetMyFunctionDetailsStringBoolean = (_, __, ___) =>
            {
                return objQueryBuilder;
            };
            ShimMyQueryBuilder.AllInstances.Execute = (_) =>
            {
                lstTaskDetailsDTO = new List<DatabaseEntityObject>()
                {
                    new DatabaseEntityObject
                    {
                        projectid = PID
                        name = Name
                    }
                };
                return lstTaskDetailsDTO;
            };
            //Act
            var controller = new MyController();
            var result = controller.GetMyAPI(ID, true);
            //Assert
        }
    }
}
0

There are 0 answers