【发布时间】:2021-06-22 00:59:34
【问题描述】:
我有这个Moq:
readonly Mock<IHeartbeat> _mockIHeartbeat = new Mock<IHeartbeat>();
[Fact]
public async Task TestWatermarkCheck()
{
WatermarkOffsets watermarkOffsets = new WatermarkOffsets(1, 10);
Offset offset = new Offset(5);
_mockIHeartbeat .Setup(x => x.GetWatermarks()).Returns(watermarkOffsets);
_mockIHeartbeat .Setup(x => x.GetOffset()).Returns(offset);
HealthCheckContext context = new HealthCheckContext();
CancellationToken cancellationToken = default;
Watermark watermark = new Watermark(_mockIHeartbeat.Object);
HealthCheckResult watermarkHealthCheckResult = await watermark.CheckHealthAsync(context, cancellationToken);
watermarkHealthCheckResult.Status.ToString().Should().Be(HealthCheckResult.Healthy().Status.ToString());
watermarkHealthCheckResult.Description.ToString().Should().Be("Low: 1 High: 10 Offset: 5");
}
这是 SUT:
public class CheckKafkaWatermark : IHealthCheck
{
private readonly IHeartbeatCheckHealthHandler _healthHandler;
public CheckKafkaWatermark(IHeartbeatCheckHealthHandler healthHandler)
{
_healthHandler = healthHandler;
}
public async Task<HealthCheckResult> CheckHealthAsync(
HealthCheckContext context,
CancellationToken cancellationToken = default)
{
return await Task.FromResult(HealthCheckResult.Healthy($"Low: {_healthHandler.GetWatermarks().Low.ToString()} High: {_healthHandler.GetWatermarks().High.ToString()} Offset: {HealthHandler.GetOffset().Value.ToString()}"));
}
}
有了这个_mockIHeartbeat.Setup(x => x.GetOffset().Returns(offset) 似乎没有设置。 IE。它始终显示为 0。
我该如何解决?
【问题讨论】:
-
你在设置里错过了关闭
)吗? -
当前状态下的问题不完整,因此不清楚您要问什么。您能否重新格式化问题,以便我们更清楚地了解当前问题以及您实际上想要做什么?请参阅How to Ask 页面以获得澄清此问题的帮助。
-
“似乎没有设置好” 是什么意思?您能否阅读How to Ask 并为我们描绘一幅完整的画面,正如minimal reproducible example 中所解释的那样?如果
CheckHealthAsync()调用IHeartbeat.GetOffsetPosition()并在HealthCheckResult.Description中返回它,那么一切都应该按预期工作。如果没有,您需要展示更多代码,解释您希望看到的内容并告诉您实际观察到的内容。 -
@runnerpaul 被测对象将是使用 healthcheck 模拟的类。看起来
Watermark是主题。 -
您是否尝试仅模拟
GetXYZ方法之一?您是否尝试过更改设置调用的顺序?它们产生相同的结果吗?
标签: c# .net unit-testing moq