C# 如何使用xUnit Assert.RaisesAny?

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

如何使用xUnit Assert.RaiseAny()?我似乎找不到任何例子

我收到了以下语法错误

事件“IMqttServer.Started”只能出现在左侧 of+=或-=

这是有道理的,因为我没有订阅它,但我不知道RaisesAny()使用什么语法

基本上,我只是想检查代理是否启动,是否至少有一个客户端连接到它,以及它是否停止

p.S.MqttServer是Mqtt代理实现,是

这是我的测验

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);
}