如何模拟哪个使用某个参数调用另一种方法?

发布于 2025-01-22 06:19:02 字数 2910 浏览 2 评论 0原文

我的服务类具有接口和注入服务。

public class SomeService
{
    private readonly ICustomConfigManager _customConfigManager;
    private readonly IList<DefaultRoleSetting> _defaultRoleSettings;
    public FCCLicenseTrackerService(ICustomConfigManager customConfigManager)
    {            
        _customConfigManager = customConfigManager;
        _defaultRoleSettings = customConfigManager.DefaultRoleSettings;
    }

我必须采用单元测试案例的服务方法。

    public async Task<List<CustomModel>> GetRequests(string Id)
    {
        var defaultRoleSetting = _defaultRoleSettings.FirstOrDefault(roleSetting => roleSetting.RoleId == Guid.Parse(GroupHelper.Name));
        ValidateDefaultSettings(defaultRoleSetting);
        return customReq;
    }
   
    private void ValidateDefaultSettings(DefaultRoleSetting defaultRoleSetting)
    {
        if (defaultRoleSetting == null)
        {
            throw new ArgumentException($"{nameof(defaultRoleSetting)} is null");
        }
        if (string.IsNullOrWhiteSpace(defaultRoleSetting.Name))
        {
            throw new ArgumentException($"{nameof(defaultRoleSetting.Name)} is null or empty");
        }
        if (string.IsNullOrWhiteSpace(defaultRoleSetting.Email))
        {
            throw new ArgumentException($"{nameof(defaultRoleSetting.Email)} is null or empty");
        }
    }

}

我是单位测试用例的新手,因为我在Web上经历了任何一个模拟内部方法的解决方案,因此,由于此方法,当“ Defaultrolesetting”是Null Pass时,我会被击中。 因此,任何人都可以共享样本代码以模拟“ var defaultrolesetting”。

我的测试代码是

public async Task GetRequests_SendingValidId_ExpectedReturnObjectType()
{
    // Arrange             
    var fakeDefaultReq = FakeDefaultRoleSetting();
    _mockCustomConfigManager.Setup(s => s.DefaultRoleSettings).Returns(fakeDefaultReq);

    var service = this.CreateService();
    string Id = "2";
    var expected = JsonConvert.DeserializeObject<IList<JObject>>(GetFakeRequests());
    //Act
    var result = await service.GetRequests(Id);

    // Assert
    Assert.Equal(JsonConvert.SerializeObject(result), JsonConvert.SerializeObject(expected));
}

用于模拟依赖注入的假对象方法。

private List<DefaultRoleSetting> FakeDefaultRoleSetting()
{
    string fakeData = @"[{
'RoleId': '00000000-0000-0000-0000-000000000000',
'Name': null,
'Email': null,
'UserId': '00000000-0000-0000-0000-000000000000'
}]";
    return JsonConvert.DeserializeObject<List<DefaultRoleSetting>>(fakeData);
}

返回匹配的假对象方法。

private string GetFakeRequests()
{
    string fakeData = @"[{
'userId': '00000000-0000-0000-0000-000000000000',
'StatusId': 0.0,
'createdOn': '0001-01-01T00:00:00',
'createdBy': '00000000-0000-0000-0000-000000000000',
'modifiedOn': null,
'modifiedBy': null,
'buildoutCompletedDate': null,
'buildoutDeadlineReason': null
}]";
    return fakeData;
}

My service class which have interface and injected service.

public class SomeService
{
    private readonly ICustomConfigManager _customConfigManager;
    private readonly IList<DefaultRoleSetting> _defaultRoleSettings;
    public FCCLicenseTrackerService(ICustomConfigManager customConfigManager)
    {            
        _customConfigManager = customConfigManager;
        _defaultRoleSettings = customConfigManager.DefaultRoleSettings;
    }

My service method to which I have to make unit test case.

    public async Task<List<CustomModel>> GetRequests(string Id)
    {
        var defaultRoleSetting = _defaultRoleSettings.FirstOrDefault(roleSetting => roleSetting.RoleId == Guid.Parse(GroupHelper.Name));
        ValidateDefaultSettings(defaultRoleSetting);
        return customReq;
    }
   
    private void ValidateDefaultSettings(DefaultRoleSetting defaultRoleSetting)
    {
        if (defaultRoleSetting == null)
        {
            throw new ArgumentException(
quot;{nameof(defaultRoleSetting)} is null");
        }
        if (string.IsNullOrWhiteSpace(defaultRoleSetting.Name))
        {
            throw new ArgumentException(
quot;{nameof(defaultRoleSetting.Name)} is null or empty");
        }
        if (string.IsNullOrWhiteSpace(defaultRoleSetting.Email))
        {
            throw new ArgumentException(
quot;{nameof(defaultRoleSetting.Email)} is null or empty");
        }
    }

}

I am new to unit test case, as I gone through on web, didn't get any solution which is mock internal method, so due to it I am struck when 'defaultRoleSetting' is null pass.
So any one can share sample code to mock for 'var defaultRoleSetting'.

My test code is

public async Task GetRequests_SendingValidId_ExpectedReturnObjectType()
{
    // Arrange             
    var fakeDefaultReq = FakeDefaultRoleSetting();
    _mockCustomConfigManager.Setup(s => s.DefaultRoleSettings).Returns(fakeDefaultReq);

    var service = this.CreateService();
    string Id = "2";
    var expected = JsonConvert.DeserializeObject<IList<JObject>>(GetFakeRequests());
    //Act
    var result = await service.GetRequests(Id);

    // Assert
    Assert.Equal(JsonConvert.SerializeObject(result), JsonConvert.SerializeObject(expected));
}

Fake object method for mock dependency injection.

private List<DefaultRoleSetting> FakeDefaultRoleSetting()
{
    string fakeData = @"[{
'RoleId': '00000000-0000-0000-0000-000000000000',
'Name': null,
'Email': null,
'UserId': '00000000-0000-0000-0000-000000000000'
}]";
    return JsonConvert.DeserializeObject<List<DefaultRoleSetting>>(fakeData);
}

Fake object method for return match.

private string GetFakeRequests()
{
    string fakeData = @"[{
'userId': '00000000-0000-0000-0000-000000000000',
'StatusId': 0.0,
'createdOn': '0001-01-01T00:00:00',
'createdBy': '00000000-0000-0000-0000-000000000000',
'modifiedOn': null,
'modifiedBy': null,
'buildoutCompletedDate': null,
'buildoutDeadlineReason': null
}]";
    return fakeData;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

牛↙奶布丁 2025-01-29 06:19:02

实际上,我在“ fakedefaultroleset”方法中发送虚拟数据,当我将其转换为真实数据时,问题就消失了。谢谢大家的支持。

Actually I was sending dummy data in 'FakeDefaultRoleSetting' json method, when I convert it to real data, the issue gone. Thanks all for support.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文