使用 NSubstitute 进行单元测试 Hangfire

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

我正在尝试对我的课程进行单元测试,其中包括后台工作。到目前为止,我正在测试的方法将作业排队,如下所示:

public void SendSms(SmsContent content){
      .... 
      _backgroundJobClient.Enqueue<ISms>(x => x.Send(content));
      ....
}

我的第一个单元测试检查是否调用了BackgroundJobClient并且看起来像这样:

 Assert.Equal(1,_backgroundJobClient.ReceivedCalls().Count());
  

一切正常,但现在我想检查所有参数是否正确发送。我正在查看 HangFire 文档,但我不知道如何使用 NSubstitute 进行测试。

谢谢!

c# unit-testing hangfire nsubstitute
2个回答
1
投票

使用此代码:

_backgroundJobClient.ReceivedWithAnyArgs()
                   .Enqueue<ISms>(x => x.Send(default));

0
投票

基于文档中的示例,您应该能够使用类似这样的东西来测试它:

/* Moq example:
client.Verify(x => x.Create(
    It.Is<Job>(job => job.Method.Name == "CheckForSpam" && job.Arguments[0] == comment.Id.ToString()),
    It.IsAny<EnqueuedState>());
*/

// Ported to NSubstitute:
_backgroundJobClient.Received().Create(
    Arg.Is<Job>(job => job.Method.Name == "CheckForSpam" && job.Arguments[0] == comment.Id.ToString()),
    Arg.Any<EnqueuedState>()
);

这仅基于记录的示例。您需要的确切参数匹配代码将取决于您使用的具体类型。

© www.soinside.com 2019 - 2024. All rights reserved.