![](/img/trans.png)
[英]Value cannot be null. Parameter name: source
[英]Value cannot be null. Parameter name: source at when test mock
嗨,我在MVC核心2.1中使用帶有模擬功能的NUnit測試。當測試構建我的測試在調試測試中失敗時,出現以下錯誤。
值不能為空。 參數名稱:System.Linq.Enumerable.ToList [TSource]處的源(IEnumerable`1源)
此類測試單元mvc core 2.1
public class Role_Test
{
#region Fields
private static IRoleService _IRoleService;
#endregion
private static Mock<IUnitOfEntity> _iUnitOfEntity;
private static Mock<IMapper> _mapper;
private static Mock<ISecurityAuthorizService> _ISecurityAuthorizService;
[ClassInitialize]
public static void ClassInit(TestContext context)
{
_iUnitOfEntity = new Mock<IUnitOfEntity>();
_mapper = new Mock<IMapper>();
_ISecurityAuthorizService = new Mock<ISecurityAuthorizService>();
_IRoleService = new RoleService(_iUnitOfEntity.Object, _mapper.Object, _ISecurityAuthorizService.Object);
}
[TestMethod]
public void TestMethod()
{
var serviceMock = new Mock<IRoleService>();
//serviceMock.Setup(x => x.LoadRole(0,0));
var result = _IRoleService.LoadRole(0,0);
Assert.AreEqual(0, result.Count);
}
}
}
private readonly IUnitOfEntity _iUnitOfEntity;
private readonly IMapper _mapper;
private readonly ISecurityAuthorizService _ISecurityAuthorizService;
public RoleService(IUnitOfEntity unitOfEntity, IMapper mapper, ISecurityAuthorizService ISecurityAuthorizService)
{
_iUnitOfEntity = unitOfEntity;
_mapper = mapper;
_ISecurityAuthorizService = ISecurityAuthorizService;
}
public List<RoleTreeViewModel> LoadRole(long AccessorId ,decimal AccessorDetailId)
{
try
{
Dictionary<string, object> outputParam = new Dictionary<string, object>();
List<SqlParameter> inputParam = new List<SqlParameter>();
string query = "Sp_Lod_RoleTree_94200";
inputParam.Add(new SqlParameter("@AccessorId", 2237));
inputParam.Add(new SqlParameter() { ParameterName = "@AccessorDetailId", SqlValue = 0.0, DbType = DbType.Decimal });
inputParam.Add(new SqlParameter("@AccessorTypeId", 6));
//(int)EnumManager.EnumObjectType.Role
outputParam.Add("@Error", "");
List<Sp_lod_Group_Result> sp_result = _iUnitOfEntity.ExecSpWithParam<Sp_lod_Group_Result>(query, ref outputParam, inputParam).ToList();
return _mapper.Map<List<Sp_lod_Group_Result>, List<RoleTreeViewModel>>(sp_result);
}
catch (Exception e)
{
return new List<RoleTreeViewModel>();
}
}
似乎您忘記了正確設置Mock對象,因此_iUnitOfEntity.ExecSpWithParam<Sp_lod_Group_Result>(query, ref outputParam, inputParam)
拒絕為null。
ToList是一種擴展方法,因此
_iUnitOfEntity.ExecSpWithParam<Sp_lod_Group_Result>(query, ref outputParam, inputParam).ToList()
是相同的
Enumerable.ToList(
_iUnitOfEntity.ExecSpWithParam<Sp_lod_Group_Result>(query, ref outputParam, inputParam)
)
_iUnitOfEntity.ExecSpWithParam
返回null。 這是ArgumentNullException的原因。
我不知道您使用哪個模擬框架
_iUnitOfEntity = new Mock<IUnitOfEntity>();
您需要定義ExecSpWithParam<Sp_lod_Group_Result>(query, ref outputParam, inputParam)
應返回的內容。
希望能有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.