i have a problem in unit test, i use moq framework to mock my database interface to returns dataset. The problem is that when i call BLL methods it returns null instead the object i setted. The BLL code is:
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;
}
The code where i setted moq is:
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",
});
and the unit test is:
[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);
}
When the test call the BLL methods arrived at line:
ipApplication = _applicationsManagerDal.AddIpApplication(ipApplication);
it return always null. Can you explain me why? How can i get setted value or how i can change the unit test? Thank you and sorry for my bad english
It.IsAny<IpApplication>()along with aCallbackto set the desired properties._mockanywhere. Very confusing. Please read minimal reproducible example guidance if you need help understanding what code needs to be present in the post.