【发布时间】:2018-01-12 15:47:45
【问题描述】:
我在单元测试中遇到问题,我使用 moq 框架来模拟我的数据库接口以返回数据集。问题是当我调用 BLL 方法时,它返回 null 而不是我设置的对象。 BLL代码是:
public ApplicationsManager(IApplicationsManagerDal applicationsManagerDal)
{
_applicationsManagerDal = applicationsManagerDal ?? throw new Exception("applicationsManagerDAL is null");
}
public IpApplication AddIpApplication(IpApplication ipApplication)
{
try
{
if (Validator.ExecuteValidation(ipApplication, new AddIpApplicationValidationRules()).ValidationFailures != null)
return ipApplication;
ipApplication = _applicationsManagerDal.AddIpApplication(ipApplication);
ipApplication.Status = CommonStatus.OperationOk;
}
catch (BaseException e)
{
ipApplication.Status = e.Status;
}
catch (Exception e)
{
ipApplication.Status = ExceptionHandler.SetStatusForException();
NLogger.LogException("IpApplication Name:" + ipApplication.Name, e);
}
return ipApplication;
}
我设置起订量的代码是:
var _mock = new Mock<IApplicationsManagerDal>();
_mock.Setup(a => a.AddIpApplication(new IpApplication
{
Code = new Guid("00000000-B935-4E12-9037-000000000000"),
Name = "APPLICATION_ZERO"
}))
.Returns(() => new IpApplication
{
Code = new Guid("9631E691-B935-4E12-9037-2E874DB15B0D"),
Description = "Test application",
Enabled = true,
Name = "APPLICATION_ZERO",
});
单元测试是:
[TestMethod(), TestCategory("Unit")]
public void AddIpApplication_ValidRequest_IpApplicationSuccessfullyAdded()
{
// Arrange
_ipApplication = new IpApplication
{
Code = new Guid("9631E691-B935-4E12-9037-2E874DB15B0D"),
Name = "APPLICATION_ZERO"
};
// Act AddIpApplication
_ipApplication = _applicationManager.AddIpApplication(_ipApplication);
Assert.IsTrue(_ipApplication.Code != Guid.Empty);
}
当测试调用 BLL 方法到达行时:
ipApplication = _applicationsManagerDal.AddIpApplication(ipApplication);
它总是返回 null。 你能解释一下为什么吗?如何获得设定值或如何更改单元测试? 谢谢你,对不起我的英语不好
【问题讨论】:
-
传递的实例/引用与模拟中设置的不同。
-
使用
It.IsAny<IpApplication>()和Callback来设置所需的属性。 -
请提供实际代码 - 到目前为止,没有迹象表明您甚至在任何地方使用
_mock。很混乱。如果您需要帮助了解帖子中需要包含哪些代码,请阅读 minimal reproducible example 指南。
标签: c# unit-testing mocking moq