- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想模拟 IServiceCollection
以使用 Nsubstite
模拟库和 检查是否使用特定接口(interface)和具体类型调用了
.AddSingleton
xUnit
这是我的单元测试:
[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 : Expected to receiveexactly 1 call matching: Add(ServiceDescriptor) Actually received nomatching calls. Received 1 non - matching call(non - matchingarguments indicated with '*' characters): Add(*ServiceDescriptor *)
最佳答案
AddSingleton
是 IServiceCollection
的扩展方法。这使得模拟或验证变得更加困难。
考虑使用接口(interface)的实际实现,然后在执行被测方法后验证预期行为。
例如
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));
}
关于c# - 如何使用 NSubstitute 框架验证接收到具有特殊类型的 AddSingleton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57123686/
我添加了一个这样的单例。 在 Startup.cs 中,我添加了以下内容: services.AddSingleton(); 我想像这样构建我的单例(当然这是不可能的): public class M
tl;博士 services.AddSingleton(); // SomeService not instantiated nor initialized? 在经典 SignalR Chat 应用程
当为使用 AddScoped 或 AddSingleton 添加的服务使用 DI 时,该服务是否需要实现 IDisposable(即使它没有使用任何非托管资源(如文件)? 从 Microsoft Do
我想模拟 IServiceCollection 以使用 Nsubstite 模拟库和 检查是否使用特定接口(interface)和具体类型调用了 AddSingleton xUnit. 这是我的单元测
为什么我应该为我的存储库或服务使用 AddScoped()?为什么不是 AddSingleton()?我知道它们之间的区别,但不明白为什么我不应该使用单例实例来避免为每个请求创建新对象。你能解释一下吗
为什么我应该为我的存储库或服务使用 AddScoped()?为什么不是 AddSingleton()?我知道它们之间的区别,但不明白为什么我不应该使用单例实例来避免为每个请求创建新对象。你能解释一下吗
考虑以下简单的 appsettings.json: { "maintenanceMode": true } 它加载在我的 Startup.cs/Configure(...) 方法中 public
我一直在通过程序类将我的依赖项注册到我的 IOC 容器中,但它变得困惑了。我决定编写一个 DI 提供程序,在其中提供并注册依赖项。 在我开始解释代码之前,这是 VS 给出的完整编译错误。 'Servi
我注意到在一些 .NET Core 示例中有对 TryAddSingleton 的调用,在一些 AddSingleton 中注册服务时。 如果服务类型尚未注册,反编译器显示 TryAdd(由 TryA
我想实现 dependency injection ASP.NET Core 中的 (DI)。因此,将此代码添加到 ConfigureServices 方法后,两种方式都有效。 ASP.NET Cor
在 asp.net 核心应用程序中,我有一个依赖注入(inject)缓存服务,它本质上是内置 MemoryCache 的包装器。 这是被缓存的示例类,它包含 Web 应用程序始终使用的一些枚举的列表:
众所周知,在 ASP.NET Core 2 中有两种获取选项类的方法: 使用 services.Configure<>()像这样: services.AddOption(); services.Con
我正在学习如何将 MongoDB 与 C# ASP.NET 一起使用,并且我一直在遵循 Microsoft 关于使用 MongoDB 的指南 Mongo Doc Guide .我已经进入添加配置模型部
我正在学习如何将 MongoDB 与 C# ASP.NET 一起使用,并且我一直在遵循 Microsoft 关于使用 MongoDB 的指南 Mongo Doc Guide .我已经进入添加配置模型部
看完this帖子我可以理解 AddTransient、AddScoped 和 AddSingleton 之间的区别,但是,我看不到它们每个的实际用法。 我的理解是 添加 transient 每次客户端
我只需添加以下内容即可访问 .NET Core 2 Web API Controller 中的 appsettings.json: public class MyController : Contro
在 ASP.NET Core 2.1 中注册自定义托管服务的正确方法是什么?例如,我有一个派生自 BackgroundService 的自定义托管服务名为 MyHostedService。我该如何注册
我正在使用 StackExchange.Redis 添加到 .NET Core 的 Redis 连接,它目前看起来像这样: public static IServiceCollection AddRe
我是一名优秀的程序员,十分优秀!