我开始使用 NuGet 包 System.IO.Abstractions 来对
File
方法(File.Exists()
、File.OpenRead()
、File.Move()
等)进行单元测试。我在单元测试项目和产品代码项目中都安装了 NuGet。我没有安装任何其他相关软件包。我的单元测试运行良好。
在产品代码中
private readonly System.IO.Abstractions.IFileSystem _fs;
public MyClass(
System.IO.Abstractions.IFileSystem fileSystem,
...
)
{
_fs = fileSystem;
...
}
在单元测试代码中
using System.IO.Abstractions;
...
private Mock<FileSystem> mockFS;
...
public MyClassTests()
{
mockFS = new Mock<FileSystem>();
...
sut = new MyClass(
mockFS.Object,
...
);
}
即使单元测试有效,产品代码也会抛出错误:
Autofac.Core.DependencyResolutionException: 'An error occurred during the activation of a particular registration. See the inner exception for details...'
FileSystem
。System.IO.Abstraction
的FileSystem
(或IFileSystem
?)课程。我尝试过各种迭代builder.RegisterType<IFileSystem>().AsImplementedInterfaces().InstancePerDependency();
但我似乎无法正确理解。
我最终尝试注册
builder.RegisterType<System.IO.Abstractions.FileSystem>()
.AsImplementedInterfaces()
.SingleInstance();
产品代码和测试代码均成功!
注意:使用混凝土
FileSystem
,而不是IFileSystem
。