C# 设置多个属性时,模拟设置()不起作用
我有这个C# 设置多个属性时,模拟设置()不起作用,c#,.net,unit-testing,moq,C#,.net,Unit Testing,Moq,我有这个Moq: readonly Mock<IHeartbeat> _mockIHeartbeat = new Mock<IHeartbeat>(); [Fact] public async Task TestWatermarkCheck() { WatermarkOffsets watermarkOffsets = new WatermarkOffsets(1, 10); Offset offset = new Offset(5); _moc
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");
}
readonly Mock\u mockIHeartbeat=new Mock();
[事实]
公共异步任务TestWatermarkCheck()
{
WatermarkOffsets WatermarkOffsets=新的水印偏移(1,10);
偏移量=新偏移量(5);
_mockIHeartbeat.Setup(x=>x.GetWatermarks())。返回(水印偏移);
_mockIHeartbeat.Setup(x=>x.GetOffset())。返回(offset);
HealthCheckContext=新的HealthCheckContext();
CancellationToken CancellationToken=默认值;
水印水印=新水印(\u mockIHeartbeat.Object);
HealthCheckResult watermarkHealthCheckResult=等待水印。CheckHealthAsync(上下文,cancellationToken);
watermarkHealthCheckResult.Status.ToString().Should().Be(HealthCheckResult.health().Status.ToString());
watermarkHealthCheckResult.Description.ToString()应()为(“低:1高:10偏移: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()}"));
}
}
公共类检查Kafkawatermark:IHealthCheck
{
私有只读iHeartBeatchHealthHandler\u healthHandler;
公共检查Kafkawatermark(IHeartbeatCheckHealthHandler healthHandler)
{
_healthHandler=healthHandler;
}
公共异步任务CheckHealthAsync(
HealthCheckContext上下文,
CancellationToken CancellationToken=默认值)
{
返回wait Task.FromResult(HealthCheckResult.health($“低:{uHealthHandler.GetWatermarks().Low.ToString()}高:{uHealthHandler.GetWatermarks().High.ToString()}偏移量:{healthHandler.GetOffset().Value.ToString()}”);
}
}
使用此\u mockIHeartbeat.Setup(x=>x.GetOffset()。返回值(offset)
似乎未被设置。即,它始终显示为0
如何解决它?问题是我的SUT中有一行:
return await Task.FromResult(HealthCheckResult.Healthy($"Low: {_healthHandler.GetWatermarks().Low.ToString()} High: {_healthHandler.GetWatermarks().High.ToString()} Offset: {HealthHandler.GetOffset().Value.ToString()}"));
我本应该:
return await Task.FromResult(HealthCheckResult.Healthy($"Low: {_healthHandler.GetWatermarks().Low.ToString()} High: {_healthHandler.GetWatermarks().High.ToString()} Offset: {_healthHandler.GetOffset().Value.ToString()}"));
顺便说一句,ToString()在这里是多余的,所以我将行改为
return await Task.FromResult(HealthCheckResult.Healthy($"Low: {_healthHandler.GetWatermarks().Low} High: {_healthHandler.GetWatermarks().High} Offset: {_healthHandler.GetOffset().Value}"));
您是否错过了设置对齐中的关闭
)
?当前状态下的问题不完整,因此不清楚您到底在问什么。你能重新格式化这个问题吗?这样我们就可以更清楚地了解当前的问题以及你实际上在做什么?请参阅本页以获取澄清此问题的帮助。什么是“似乎未设置”?你能像上面解释的那样给我们看一幅全貌吗?如果checkhealthsync()
调用IHeartbeat.GetOffsetPosition()
并在HealthCheckResult.Description
中返回该函数,则所有函数都应按预期工作。如果没有,您需要显示更多的代码,解释您期望看到的内容,并告诉您实际观察到的内容。@runnerpaul测试的主题将是使用healthcheck模拟的类。看起来主题是Watermark
。您是否仅尝试模拟其中一个GetXYZ
方法?您是否尝试更改设置调用的顺序?它们产生相同的结果吗?