Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动夹具&x2B;NSubstitute:冻结模拟?_C#_Mocking_Autofixture_Nsubstitute - Fatal编程技术网

C# 自动夹具&x2B;NSubstitute:冻结模拟?

C# 自动夹具&x2B;NSubstitute:冻结模拟?,c#,mocking,autofixture,nsubstitute,C#,Mocking,Autofixture,Nsubstitute,我试图访问注入构造函数的模拟(通过Nsubstitute)类 我使用了下面的代码 var fixture = new Fixture() .Customize(new AutoNSubstituteCustomization()); var sut = fixture.Create<MyService>(); var fixture=newfixture() .Customize(新的AutoNSubstituteCustomization()); var sut=fix

我试图访问注入构造函数的模拟(通过Nsubstitute)类

我使用了下面的代码

var fixture = new Fixture()
    .Customize(new AutoNSubstituteCustomization());

var sut = fixture.Create<MyService>();
var fixture=newfixture()
.Customize(新的AutoNSubstituteCustomization());
var sut=fixture.Create();
成功地创建了sut,并在“MyService”的构造函数中注入了名为“IFileUtils”的接口的模拟版本

但是我需要接近它,所以在阅读之后我相信我需要冻结这个物体,这样我才能像这样接近它

var fileUtilMock= fixture.Freeze<Mock<IFileUtils>>();
var fileUtilMock=fixture.Freeze();
但我认为这段代码是Moq语法,因为找不到“Mock”

通常,要创建类的Nsubstitute,需要执行以下操作

var fileUtilMock= Substitute.For<IFileUtils>();
var fileUtilMock=Substitute.For();
但当然这不是冻结的,所以它不会被使用并注入构造函数

有人能帮忙吗?

在创建
MyService
实例之前,您必须冻结自动模拟的实例

更新

正如鲁本·巴特林所指出的,使用NSubstitute,您所要做的就是:

var fixture = new Fixture()
    .Customize(new AutoNSubstituteCustomization());

var substitute = fixture.Freeze<IFileUtils>();
你所要做的就是:

 var substitute = fixture.Freeze<IInterface>();
 substitute.MakeIt(dummy).Returns(null);
var substitute=fixture.Freeze();
replacement.MakeIt(dummy).Returns(null);
返回
实际上是NSubstitute中的一种扩展方法。

基于AutoMoq的推论和工作原理,我相信:

  • NSubstitute在
    Mock
    Mock.Object
    之间没有像Moq那样的分离
  • SpecimenBuilderNode
    中的AutoFixture.Auto*扩展钩子提供接口的[mock]实现,即
    fixture.Create()
    应该可以工作
  • 冻结相当于一个
    var result=fixture.Create();fixture.Inject(结果)
因此,你应该能够说:

var fileUtilMock = fixture.Freeze<IFileUtils>();
var fileUtilMock=fixture.Freeze();

但我相信这是针对Moq的,我正在使用NSubstitute,Mock-Mock未找到或不存在。@daniel hilgarth是我的任何推论,有什么好处吗:我可以随意编辑您喜欢的内容和/或告诉我删除帖子!
var fileUtilMock = fixture.Freeze<IFileUtils>();