Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置多个属性时,模拟设置()不起作用_C#_.net_Unit Testing_Moq - Fatal编程技术网

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
方法?您是否尝试更改设置调用的顺序?它们产生相同的结果吗?