为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 NSubstitute 框架验证是否收到特殊类型的 AddSingleton

如何使用 NSubstitute 框架验证是否收到特殊类型的 AddSingleton

C#
噜噜哒 2023-07-09 09:56:01
我想使用模拟库和.mock 来模拟IServiceCollection检查是否AddSingleton使用特定接口和具体类型进行调用。NsubstitexUnit这是我的单元测试:[Fact] public checkIfServicesAddedTo_DI(){    var iServiceCollectionMock = Substitute.For<IServiceCollection>();    var iConfiguration = Substitute.For<IConfiguration>();    MatchServicesManager servicesManager = new MatchServicesManager();    servicesManager.AddServices(iServiceCollectionMock, iConfiguration);    iServiceCollectionMock.Received(1).AddSingleton(typeof(IMatchManager) , typeof(MatchManager));}这是实现:public class MatchServicesManager : IServicesManager{    public void AddServices(IServiceCollection services, IConfiguration configuration)    {        services.AddSingleton<IMatchManager, MatchManager>();    }}我预计测试会成功,但它失败并出现以下错误:NSubstitute.Exceptions.ReceivedCallsException :预计收到正好 1 个呼叫匹配:Add(ServiceDescriptor) 实际上没有收到匹配的呼叫。收到 1 个不匹配的呼叫(不匹配的参数以“*”字符表示):Add(*ServiceDescriptor *)
查看完整描述

1 回答

?
米脂

TA贡献1836条经验 获得超3个赞

AddSingleton是 上的扩展方法IServiceCollection。这使得模拟或验证变得更加困难。


考虑使用接口的实际实现,然后在执行被测方法后验证预期行为。


例如


public void checkIfServicesAddedTo_DI() {

    //Arrange

    var services = new ServiceCollection();// Substitute.For<IServiceCollection>();

    var configuration = Substitute.For<IConfiguration>();

    MatchServicesManager servicesManager = new MatchServicesManager();


    //Act

    servicesManager.AddServices(services, configuration);


    //Assert (using FluentAssertions)

    services.Count.Should().Be(1);

    services[0].ServiceType.Should().Be(typeof(IMatchManager));

    services[0].ImplementationType.Should().Be(typeof(MatchManager));

}


查看完整回答
反对 回复 2023-07-09
  • 1 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信