- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我很难测试使用 .net 核心 ServiceProvider
返回给定一些逻辑的特定实现的工厂。
using (var scope = _serviceProvider.CreateScope())
{
var services = scope.ServiceProvider.GetServices<IUrlProcessor>();
}
我部分接受了这个
var serviceProvider = new Mock<IServiceProvider>();
serviceProvider.Setup(m => m.GetService(typeof(IEnumerable<IUrlProcessor>)))
.Returns(new List<IUrlProcessor>() {
new PassthruProcessor()
});
GetServices
似乎有效,但 CreateScope
调用只是通过异常。这是一个扩展方法,我不知道我应该模拟的确切类是什么,以便 CreateScope
调用有效。
最佳答案
在这种情况下,创建返回更多模拟的模拟可能无济于事。您的类依赖于 IServiceProvider
,您需要调用 CreateScope()
。
模拟 IServiceProvider
以返回另一个模拟在功能上与使用 真实 ServiceProvider
并将其配置为返回模拟在功能上相同。不同之处在于,如果您使用真正的 ServiceProvider
,则不必模拟 CreateScope
。
(我完全回避了有关何时何地依赖 IServiceProvider.
的问题)
这是一个大大简化的例子:
依赖于 IServiceProvider
的类:
public class ScopedFooFactory : IFooFactory
{
private readonly IServiceProvider _serviceProvider;
public ScopedFooFactory(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public IFoo CreateFoo()
{
using (var scope = _serviceProvider.CreateScope())
{
return scope.ServiceProvider.GetService<IFoo>();
}
}
}
...和一些单元测试代码:
var serviceCollection = new ServiceCollection();
var fooMock = new Mock<IFoo>();
serviceCollection.AddScoped<IFoo>(provider => fooMock.Object);
var serviceProvider = serviceCollection.BuildServiceProvider();
var subject = new ScopedFooFactory(serviceProvider);
var foo = subject.CreateFoo();
Assert.AreSame(fooMock.Object, foo);
对我来说,这比创建返回更多模拟的模拟更简单、更容易。
关于c# - 模拟服务提供者 GetServices,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54832377/
在我们的项目(Osgi、Spring-Dm、Apache-Felix)中,当 BundleContext.getService() 返回 null 时,我们在生产中遇到了一些问题。它很少发生,而且一开
我很难测试使用 .net 核心 ServiceProvider 返回给定一些逻辑的特定实现的工厂。 using (var scope = _serviceProvider.CreateScope())
我正在编写一个针对 dotnet core 框架 3.1 的应用程序。我使用依赖注入(inject)来配置数据库上下文等。在我的 Program.cs 中,我有以下代码: var host = new
我正在尝试使用 pendingintent 启动服务,这就是我正在尝试的方式 btnSave.setOnClickListener(new OnClickListener() { @O
我正在尝试在 android 上构建一个有效的 junit 测试套件。 由于我是 Junit 的新手,所以我不知道如何使用 ServiceTestCase 类。 我不知道如何让 getService(
我只是尝试 FirebaseAdmin SDK,当我在 Eclipse Java 中使用以下代码时, Storage storage = StorageOptions.getDefaultIn
我正在尝试通过调用以下两个服务函数通过蓝牙将设备与手机连接。第一个“mBluetoothGatt.getService(uuid)”和“BluetoothGattCharacteristic.getC
以下代码片段尝试创建连接到特定 rvd 的 Tib DaemonManager,然后查询该 rvd 的服务。 public static void main(String[] args) throws
按照我在这个帖子中得到的建议 [ Ninject UOW pattern, new ConnectionString after user is authenticated我现在明白我不应该使用以下行
我创建了一个 Action 过滤器来根据传入的 id 检查 id 是否正确。 过滤器的构造方法接受一个服务类型参数。 在 ActionMethod 运行之前,我需要服务来检查此 ID。但是 GetSe
getBroadcast和getService的requestCode的请求码可以一样吗?例如, Intent intent = new Intent(INTENT_FILTER); PendingI
我想通过外部 PHP 脚本在 phpfox 框架表中插入一些记录 phpfox_user 已应用reference .在表 phpfox_user 中注册用户从 phpfox 外部访问 php 库函数
您好,我正在使用带有 Java 扩展的 SmartFoxServer。在该扩展中,我正在尝试获取 firestore 实例。下面是我用来连接到在 IDE (Eclipse) 中运行良好的服务的代码。但
我正在实现一个新的 .NET Core 项目并为我的服务层进行依赖注入(inject)。我创建了一个实现 IServiceProvider 的接口(interface),现在必须实现 GetServi
在我的应用程序中,我传递助听器服务的 UUID 编号,如来自谷歌的 BLE 示例,即 0000a00-0000-1000-8000-00805f9b34fb 但是 getservice 返回 null
根据 this tutorial ,要在我的 Asp.net MVC 3 应用程序中使用 Ninject,我所要做的就是通过 Nuget 安装包并配置依赖项。 按照这些步骤操作 Install Pac
我正在尝试使用 TFS SDK 连接到 TFS 2010,但无法获得 VersionControlServer 服务。 var servers = RegisteredTfsConnections.G
我有接口(interface)IOrder和 FurnitureOrder实现它 我需要像这样注册多个实现 services.AddSingleton(IOrder, FurnitureOrder()
摘要 我一直在用ScriptApp.getService().getUrl()在我的 Google Apps 脚本项目中成功获取当前实例 (dev|prod) 一段时间了。截至昨天,返回值似乎完全取决
我有一个使用 Autofac 的 ASP.NET MVC 应用程序。 我已通过以下方式添加了适当的包: Install-Package Autofac Install-Package Autofac.
我是一名优秀的程序员,十分优秀!