单元测试错误”;对象引用未设置为对象的实例&”;
本文关键字:对象 实例 错误 对象引用 单元测试 设置 | 更新日期: 2023-09-27 18:27:59
在我的控制器中,我想测试控制器是否正在调用存储库方法。这是控制器中的方法
[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);
}
这是测试方法
[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));
}
它抛出一个错误说
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
我使用RhinoMock作为嘲讽工具。有人能帮我解决我犯的错误吗?
在存根化方法之后,使用Return
来指示它应该返回什么,例如:
_mockRepository
.Stub(x => x.GetModuleKindPropertyNames(Arg<string>.Is.Anything))
.Return(Enumerable.Empty<string>().AsQueryable());
另外,更改此行:
_controller.GetModulePropertyName(Arg<string>.Is.Anything);
到此:
_controller.GetModulePropertyName(string.Empty);
正如异常所解释的那样,Arg
仅用于模拟定义。
您的存根上没有返回。
_mockRepository.Stub(x => x.GetModuleKindPropertyNames(Arg<string>.Is.Anything));
如果没有该返回,此行将针对空引用运行lambda
IList<Property> model = temp.Select(item => new Property {Name = item}).ToList();
所以:
_mockRepository.Stub(x => x.GetModuleKindPropertyNames(Arg<string>.Is.Anything)).Return(new Module[]{}); // set some return data here