如何模拟哪个使用某个参数调用另一种方法?
我的服务类具有接口和注入服务。
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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
实际上,我在“ 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.