我有一个第三方类
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;
}
谢谢, 亚当