【发布时间】:2020-05-28 15:40:09
【问题描述】:
我在一个类上有两个公共方法,都从外部代码调用,但其中一个方法也调用另一个。我想对一个方法进行单元测试,然后验证它是否调用了同一个类中的另一个公共方法,然后我会有单独的测试来测试另一个第二种方法。结构看起来像这样:
public CalculatedResult GetCalculatedDetailsById(Guid id)
{
var entity = _entityRepository.GetEntity(id);
if(entity == null)
{
throw new NotFoundException();
}
return GetCalculatedDetailsForEntity(entity);
}
public CalculatedResult GetCalculatedDetailsForEntity(Entity entity)
{
var supplementalData = _someDependency.GetSupplementalData(entity.Property);
var calculatedData = _someOtherDependency.ProcessEntity(entity, supplementalData);
_cache.Set(calculatedData, expiry);
return calculatedData;
}
对于GetCalculatedDetailsForEntity,我将模拟依赖项,验证它们是否被正确调用,验证缓存是否设置正确,验证返回值是否符合所提供的输入和模拟值的预期值。
对于GetCalculatedDetailsById,我将模拟存储库依赖项,测试它是否按预期调用了GetEntity,并在必要时抛出异常。然后我想验证它是否使用预期的实体对象调用GetCalculatedDetailsForEntity,但我不想验证它是否执行GetCalculatedDetailsForEntity 中的所有逻辑,因为我已经在其他地方进行了测试。
是否可以为 GetCalculatedDetailsById 测试模拟 GetCalculatedDetailsForEntity,以便我可以验证它是否按预期被调用?
我的技术栈是 .NET Core、XUnit 和 Moq。
【问题讨论】:
标签: unit-testing .net-core mocking moq xunit.net