c# - 使用适配器模式测试记录器
问题描述
我有一个类,想测试该方法是否被调用,记录器记录。
public class LoggerAdapter<TheClassWhichHasTheMethod>: ILoggerAdapter<etc>
这是我制作的适配器。所以我在记录器类中有我正在使用和需要的方法,并将它们放在适配器记录器类中
public void MethodOne(param1, param2, param3, param4)
这个 void 方法自己调用适配器内的下一个方法:
public void MethodTwo(param1, param2, param3, param4)
之后,记录完成。但是等等,还有更多。记录器正在执行其工作的方法如下所示:
public async Task Execute()
{
await //some logic
//some more logic
Here the logger does its job: _logger.MethodOne(param1, param2, param3)
//After logging finishes, more logic follows
}
现在,适配器的接口需要扩展ILogger
,因为我需要 ILogger 作为我的param
. 问题是,在我完成Act
部分之后:
//await _classInstance.Execute();
而且由于我正在测试一个 void 方法,所以会有一些超时。好的,超时结束,但之后我不知道如何验证记录器是否已记录,即 _classInstance.Execute() 启动,记录器调用 MethodOne,它调用 MethodTwo,然后它完成。
解决方案
你知道我建议你使用 library Moq
。这个库有很酷的方法Verify
,你可以测试你的方法是否被调用。你需要做这样的事情:
var objectA = new Mock<ObjectA>();
//ObjectA有Method1,Method2。Method1、Method2 必须是 public virtual 或属于某个接口,因此 ObjectA 必须实现该接口;
然后objectA.Verify(o=>o.Method1(), Times.Once);
// 和 Method2 一样。
推荐阅读
- javascript - json上的条件css(动态)bason
- c# - 如何开发具有扩展的软件
- java - Is this code realiable for working out hours in Java, considering summer time changes?
- python - Importing SVG into HTML
- javascript - Block inline script detecting devtools on edge/chromium
- snowflake-cloud-data-platform - DMaaP 到雪花的迁移
- python - Pandas mutliIndex 按组排序
- laravel - Route::apiResource() Laravel Framework 8.64.0 的问题
- ansible - 在列表中获取特定的 ansible 事实
- github - 将自定义域添加到我的站点时出现 ChunkLoadError