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
}
}
}