Unit Testing error "Object reference not set to an instance of an object."
15,723
Solution 1
After stubbing the method use Return
to indicate what should it return, for example:
_mockRepository
.Stub(x => x.GetModuleKindPropertyNames(Arg<string>.Is.Anything))
.Return(Enumerable.Empty<string>().AsQueryable());
Also, change this line:
_controller.GetModulePropertyName(Arg<string>.Is.Anything);
to this:
_controller.GetModulePropertyName(string.Empty);
As the exception explains - Arg
is only to be used in mock definitions.
Solution 2
You don't have a return on your stub.
_mockRepository.Stub(x => x.GetModuleKindPropertyNames(Arg<string>.Is.Anything));
without that return, this line will be running a lambda against a null reference
IList<Property> model = temp.Select(item => new Property {Name = item}).ToList();
so:
_mockRepository.Stub(x => x.GetModuleKindPropertyNames(Arg<string>.Is.Anything)).Return(new Module[]{}); // set some return data here
Author by
Cybercop
Master student of Web Science. Block chain and Machine Learning enthusiast
Updated on June 12, 2022Comments
-
Cybercop almost 2 years
In my controller I want to test if the controller is calling the repository method. Here is the method in controller
[HttpGet] public ActionResult GetModulePropertyName(string moduleTypeValue) { var temp = _modulerepository.GetModuleKindPropertyNames(moduleTypeValue); IList<Property> model = temp .Select(item => new Property {Name = item}) .ToList(); return PartialView("GetModulePropertyName",model); }
And here is the test method
[TestMethod] public void GetModulePropertyName_Action_Calls_GetModuleKindPropertyNames() { _mockRepository.Stub(x => x.GetModuleKindPropertyNames(Arg<string>.Is.Anything)); _controller.GetModulePropertyName(Arg<string>.Is.Anything); _mockRepository.AssertWasCalled(x=>x.GetModuleKindPropertyNames(Arg<string>.Is.Anything)); }
It throws an error saying
Test method AdminPortal.Tests.ModuleControllerTests.GetModulePropertyName_Action_Calls_GetModuleKindPropertyNames threw exception: System.NullReferenceException: Object reference not set to an instance of an object. at System.Linq.Queryable.Select(IQueryable`1 source, Expression`1 selector) at AdminPortal.Areas.Hardware.Controllers.ModuleController.GetModulePropertyName(String moduleTypeValue) in ModuleController.cs: line 83 at AdminPortal.Tests.ModuleControllerTests.GetModulePropertyName_Action_Calls_GetModuleKindPropertyNames() in ModuleControllerTests.cs: line 213
I'm using RhinoMock as mocking tool. Can someone help with what mistake i'm making?