Nsubstitute 中 Moq 的 Mock.Get 的等效语法
Equivalent syntax of Moq's Mock.Get in Nsubstitute
我正在为后台服务编写单元测试。如果我使用 Moq 框架似乎可行,但我们在团队中使用 NSubstitute 并希望坚持使用它。
我指的是 @How can i write unit test for my background service? 提到的代码。
我设法将代码语法从 Moq 转换为 NSubstitute,除了一行,即 Mock.Get(service)
。
谁能帮我将下面的代码转换为使用 NSubstitute 而不是 Moq,或者让我知道 NSubstitute 中 Mock.Get(service)
的等效语法。
IServiceCollection services = new ServiceCollection();
services.AddSingleton(Mock.Of<someobject>()); // Nsubstittute equivalent is services.AddSingleton(Substitute.For<someobject>());
var serviceProvider = services.BuildServiceProvider();
var service = serviceProvider.GetRequiredService<someobject>();
var hostedService = serviceProvider.GetService<IHostedService>();
await hostedService.StartAsync(CancellationToken.None);
await Task.Delay(2000);
await hostedService.StopAsync(CancellationToken.None);
var mock = Mock.Get(service);
mock.Verify(_ => _.SendQuote(), Times.Once);
通常,由于 nsub 直接与模拟接口一起工作,因此您希望在变量中保留它。
//Arrange
IServiceCollection services = new ServiceCollection();
var mock = Substitute.For<someobject>(); //<-- THE MOCK
services.AddSingleton(mock);
//...add your hosted service that depends on the mock as needed
var serviceProvider = services.BuildServiceProvider();
var hostedService = serviceProvider.GetService<IHostedService>();
//Act
await hostedService.StartAsync(CancellationToken.None);
await Task.Delay(2000);
await hostedService.StopAsync(CancellationToken.None);
//Assert
mock.Received().SendQuote(); //<-- assert the mock directly
我正在为后台服务编写单元测试。如果我使用 Moq 框架似乎可行,但我们在团队中使用 NSubstitute 并希望坚持使用它。
我指的是 @How can i write unit test for my background service? 提到的代码。
我设法将代码语法从 Moq 转换为 NSubstitute,除了一行,即 Mock.Get(service)
。
谁能帮我将下面的代码转换为使用 NSubstitute 而不是 Moq,或者让我知道 NSubstitute 中 Mock.Get(service)
的等效语法。
IServiceCollection services = new ServiceCollection();
services.AddSingleton(Mock.Of<someobject>()); // Nsubstittute equivalent is services.AddSingleton(Substitute.For<someobject>());
var serviceProvider = services.BuildServiceProvider();
var service = serviceProvider.GetRequiredService<someobject>();
var hostedService = serviceProvider.GetService<IHostedService>();
await hostedService.StartAsync(CancellationToken.None);
await Task.Delay(2000);
await hostedService.StopAsync(CancellationToken.None);
var mock = Mock.Get(service);
mock.Verify(_ => _.SendQuote(), Times.Once);
通常,由于 nsub 直接与模拟接口一起工作,因此您希望在变量中保留它。
//Arrange
IServiceCollection services = new ServiceCollection();
var mock = Substitute.For<someobject>(); //<-- THE MOCK
services.AddSingleton(mock);
//...add your hosted service that depends on the mock as needed
var serviceProvider = services.BuildServiceProvider();
var hostedService = serviceProvider.GetService<IHostedService>();
//Act
await hostedService.StartAsync(CancellationToken.None);
await Task.Delay(2000);
await hostedService.StopAsync(CancellationToken.None);
//Assert
mock.Received().SendQuote(); //<-- assert the mock directly