我正在模拟请求但它显示为 Null?

I am Making Mock of request But it showing Null?

我正在模拟注册代理用户,但它显示了它的一些属性 Null。

我是新手,不懂这个。

我正在尝试制作注册代理用户的模拟模型

[TestMethod]
public async Task ABCreateActionResult_ReturnsBadRequest_Badrequest()
{
    RegisterAgencyUserRequest mock = new Mock<RegisterAgencyUserRequest>().Object;

    var controller = _accountController.RegisterAgencyUser(mock);

    JsonResult viewResult = (JsonResult)await _accountController.RegisterAgencyUser(mock);

}

这是我要测试的内容

public async Task<IActionResult> RegisterAgencyUser([FromBody] Models.Request.RegisterAgencyUserRequest request)
{
    JsonContentResult jsonContentResult = new JsonContentResult();
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    if (string.IsNullOrEmpty(request.InvitationCode) || string.IsNullOrWhiteSpace(request.InvitationCode))
        return Json(new SharedResponse(AppConstants.ServiceReponses.Error, "A user can't be registered without invitation"));

    var invitationDetails = _inviteRepository.GetInvitaionCodeDetails(request.InvitationCode);

    if (invitationDetails.Type != (int)InviteType.Agency)
    {
        return Json(new SharedResponse(AppConstants.ServiceReponses.Error, "Invalid invitation code"));
    }

    //...

您需要在 mock 上设置一些东西,您的代码只会创建一个空对象。

var mock = new Mock<RegisterAgencyUserRequest>();
mock.Setup(x => x.Address).Returns(() => "some address");
RegisterAgencyUserRequest request = mock.Object;

编辑:Azhar Khorasany 的回答解释了应该如何完成,不是模拟 POCO,而是模拟您在测试中使用的 service/repository。

您只模拟对您正在测试的 class 的依赖。所以你不需要模拟 POCO。只需使用如下虚拟数据进行设置:

var model = new RegisterAgencyUserRequest
{
    Address = "Value1",
    AgencyName = "Value2",
    //...
};

并像下面这样使用它:

var controller = _accountController.RegisterAgencyUser(model);

您对该方法的依赖是:

_inviteRepository.GetInvitaionCodeDetails()

所以你需要模拟 _inviteRepository 并在初始化时将其注入到被测对象控制器中。