C# 如何使用xUnit Assert.RaisesAny?
如何使用xUnit Assert.RaiseAny()?我似乎找不到任何例子 我收到了以下语法错误 事件“IMqttServer.Started”只能出现在左侧 of+=或-= 这是有道理的,因为我没有订阅它,但我不知道RaisesAny()使用什么语法 基本上,我只是想检查代理是否启动,是否至少有一个客户端连接到它,以及它是否停止 p.S.MqttServer是Mqtt代理实现,是 这是我的测验C# 如何使用xUnit Assert.RaisesAny?,c#,unit-testing,xunit,C#,Unit Testing,Xunit,如何使用xUnit Assert.RaiseAny()?我似乎找不到任何例子 我收到了以下语法错误 事件“IMqttServer.Started”只能出现在左侧 of+=或-= 这是有道理的,因为我没有订阅它,但我不知道RaisesAny()使用什么语法 基本上,我只是想检查代理是否启动,是否至少有一个客户端连接到它,以及它是否停止 p.S.MqttServer是Mqtt代理实现,是 这是我的测验 public class ResearchTestingOnly { private r
public class ResearchTestingOnly
{
private readonly ITestOutputHelper output;
public ResearchTestingOnly(ITestOutputHelper output)
{
this.output = output;
}
[Fact]
public void Test1()
{
IMqttServer _mqttBroker = new MqttFactory().CreateMqttServer();
var receivedEvents = new List<string>();
_mqttBroker.ClientConnected += delegate (object sender, MqttClientConnectedEventArgs args)
{
receivedEvents.Add(args.ClientId);
};
Assert.RaisesAny<EventHandler>(_mqttBroker.Started);
Assert.RaisesAny<MqttClientConnectedEventArgs>(_mqttBroker.ClientConnected);
Assert.RaisesAny<EventHandler>(_mqttBroker.Stopped);
//** Start Broker
Task _brokerTask = Task.Run(() => _mqttBroker.StartAsync(new MqttServerOptions()));
//** Wait 10 Seconds
var pause = new ManualResetEvent(false);
pause.WaitOne(10000);
//** Stop Broker
Task _brokerStopTask = Task.Run(() => _mqttBroker.StopAsync());
//** Wait for Broker Tasks to Complete
Task.WaitAll(_brokerTask, _brokerStopTask);
output.WriteLine($"Number of Clients Connected: {receivedEvents.Count}");
foreach(var b in receivedEvents)
{
output.WriteLine(b);
}
}
}
仅限公共类研究测试
{
私有只读ITestOutputHelper输出;
public Research TestingOnly(ITestOutputHelper输出)
{
这个。输出=输出;
}
[事实]
公共void Test1()
{
IMqttServer_mqttBroker=new MqttFactory().CreateMqttServer();
var receivedEvents=新列表();
_mqttBroker.ClientConnected+=委托(对象发送方,MqttClientConnectedEventArgs参数)
{
receivedEvents.Add(args.ClientId);
};
Assert.RaisesAny(_mqttBroker.Started);
Assert.RaisesAny(_mqttBroker.ClientConnected);
Assert.RaisesAny(_mqttBroker.Stopped);
//**启动代理
Task _brokerTask=Task.Run(()=>_mqttBroker.StartAsync(新的MqttServerOptions());
//**等10秒钟
var pause=新手动重置事件(错误);
暂停。等待一(10000);
//**止损经纪人
Task _brokerStopTask=Task.Run(()=>_mqttBroker.stopsync());
//**等待代理任务完成
Task.WaitAll(_brokerTask,_brokerStopTask);
WriteLine($“连接的客户端数:{receivedEvents.Count}”);
foreach(receivedEvents中的var b)
{
输出写入线(b);
}
}
}
基于(将x
替换为\u mqttBroker
):
[事实]
公共静态无效GotExpectedEvent()
{
var evt=Assert.RaisesAnyAsync(
h=>\u mqttBroker.Started+=h,
h=>\u mqttBroker.Started-=h,
()=>Task.Run(()=>mqttBroker.StartAsync(新的MqttServerOptions());
Assert.NotNull(evt);
Assert.Equal(_mqttBroker,evt.Sender);
等于(EventArgs.Empty,evt.Arguments);
}
如果您将源回购的示例应用于OPs问题,它会更好。:)是的,正如Nkosi所说,这很有帮助,但这并不是一个完整的答案,我用“mqttBroker”代替了“x”。希望能有帮助
[Fact]
public static void GotExpectedEvent()
{
var evt = Assert.RaisesAnyAsync<EventArgs>(
h => _mqttBroker.Started += h,
h => _mqttBroker.Started -= h,
() => Task.Run(() => _mqttBroker.StartAsync(new MqttServerOptions())));
Assert.NotNull(evt);
Assert.Equal(_mqttBroker, evt.Sender);
Assert.Equal(EventArgs.Empty, evt.Arguments);
}