Func的Moq Raise事件<T1, Task>

问题描述 投票:0回答:0

我有一个第三方类

MqttClient
里面有一个事件(
Func<T1, Task>
)。我想在
MyClient
类中监听这个事件,当它被调用时,我在我的类中更新属性
IsConnected
。对于我的测试,我模拟了
IMqttClient
接口,我想引发该事件,以便我可以测试我的属性是否在它发生时得到更新。但是,当我尝试执行此操作时,出现有关参数计数不匹配的错误。我发现了很多关于使用
EventHandler<T>
的例子,但是由于这个类不在我的控制范围内,我需要它来使用
Func
.

System.Reflection.TargetParameterCountException:“参数计数不匹配。”

以下是我尝试过的测试:

[Fact]
public void Connect_IsConnectedSetToTrue()
{
    MqttClientConnectedEventArgs eventArgs = new(new MqttClientConnectResult());
    _mockMqttNetClient.Raise(x => x.ConnectedAsync += null);
    _mqttClient.Connect();
    Assert.True(_mqttClient.IsConnected);
}

[Fact]
public void Connect_IsConnectedSetToTrue()
{
     MqttClientConnectedEventArgs eventArgs = new(new MqttClientConnectResult());
    _mockMqttNetClient.Raise(x => x.ConnectedAsync += null, eventArgs);
    _mqttClient.Connect();
    Assert.True(_mqttClient.IsConnected);
}

[Fact]
public void Connect_IsConnectedSetToTrue()
{
    MqttClientConnectedEventArgs eventArgs = new(new MqttClientConnectResult());
    _mockMqttNetClient.Raise(x => x.ConnectedAsync += null, this, eventArgs);
    _mqttClient.Connect();
    Assert.True(_mqttClient.IsConnected);
}

MyClient
班级:

public class MyClient
{
    private readonly IMqttClient _client;

    public bool IsConnected { get; private set; } = false;

    public MQTTClient(IMQTTNetClientFactory mqttNetFactory)
    {
        _client = mqttNetFactory.Create();
        _client.ConnectedAsync += Client_ConnectedAsync;
    }

    public async Task Connect()
    {
        MqttClientOptions options = new MqttClientOptionsBuilder()
            .WithTcpServer(_url, _port)
            .WithCredentials(_username, _password)
            .WithProtocolVersion(MqttProtocolVersion.V500)
            .Build();

        await _client.ConnectAsync(options);
    }

   
    private Task Client_ConnectedAsync(MqttClientConnectedEventArgs arg)
    {
        _logger.LogInformation("Client connected to the MQTT broker.");
        IsConnected = true;
        return Task.FromResult(0);
    }
}

这就是

MqttClient
类中的事件。

public interface IMqttClient : IDisposable
{
    event Func<MqttClientConnectedEventArgs, Task> ConnectedAsync;
}

谢谢, 亚当

c# .net-core mqtt moq xunit
© www.soinside.com 2019 - 2024. All rights reserved.