gpt4 book ai didi

c# - 单元测试无限轮询方法

转载 作者:行者123 更新时间:2023-12-02 02:22:08 26 4
gpt4 key购买 nike

我有一个方法,当应用程序启动时在新任务中启动,并在应用程序结束时停止。该方法每半秒执行一些逻辑。我对如何测试它感到非常困惑 - 有线索吗?

public async Task StartPoll(CancellationToken token)
{
while(!token.IsCancellationRequested)
{
try
{
var dict = dependecy.getDictionary();
var model = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(dict));
udpDistributer.Send(model, model.Length, _distributionEndPoint);
}
finally
{
await Task.Delay(500, Token);
}
}
}

其中 udpDistributer 是来自 DI 的 new UdpClient(0)_distributionEndPointIPEndPoint

基本上我想检查逻辑是否正常工作以及是否以正确的时间间隔发送正确的数据。我如何使用 xunit 来做到这一点?

编辑

我已经做到了这一点:

   // arrange
...
cts = new CancellationTokenSource(timeout);

//act
await sut.StartPoll(cts.Token);

// assert
mockUdpDistributer.Verify(x => x.Send(expectedModel, expectedModel.length,
It.IsAny<IPEndPoint>()), Times.Exactly(expectedTimes));

但是,这会导致测试失败并出现 TaskCanceledException

最佳答案

您验证udpDistributer.Send()(我假设您已注入(inject),如果没有,请执行此操作)在您需要的时间内被调用了适当的次数,然后取消 token 。

关于c# - 单元测试无限轮询方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66241895/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com