unit-testing - 单元测试一个方法调用同一个类中的另一个方法
问题描述
我在一个类上有两个公共方法,它们都是从外部代码调用的,但是其中一个方法也调用另一个。我想对一个方法进行单元测试,然后验证它是否调用了同一个类中的另一个公共方法,然后我会有单独的测试来测试另一个第二种方法。结构看起来像这样:
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
,因为我已经在其他地方进行了测试。
是否可以模拟GetCalculatedDetailsForEntity
测试GetCalculatedDetailsById
,以便我可以验证它是否按预期被调用?
我的技术栈是 .NET Core、XUnit 和 Moq。
解决方案
您可以对第一种方法执行以下操作,因为您基本上是在根据我阅读您的问题的方式进行测试以查看没有引发异常:
[Test]
public void TestNoExceptionIsThrownByMethodUnderTest()
{
var CalculatedResult = new CalculatedResult();
try
{
var calculatedResult = CalculatedResult.GetCalculatedDetailsById(someid);
}
catch (Exception ex)
{
check here to see what exception type is. If NotFoundException then
Assert.Fail("NotFoundException Thrown");
Else exception was thrown in method being called which your other method should handle
}
}
对于您的第二种方法(GetCalculatedDetailsForEntity)可以像您说的那样运行单独的测试。
推荐阅读
- c# - 你怎么称呼这种类型的财产?
- php - SAML(PHP) 使用 onelogin 工具包
- html - HTML5 视频控件在页面加载时缩小
- android - Kotlin - 如何在映射和过滤时跳过异常条目
- android - 如何使用全选复选框选择包含复选框的列表视图的所有行
- r - 用上一行中的值替换特定值
- node.js - 收到错误 UnhandledPromiseRejectionWarning
- json - 有没有办法从 Couchdb 中获得更干净的 JSON?
- java - 匹配最接近的组,我真的无法形容
- android - 当应用程序处于前台时需要关闭点击通知 - android