C# 自动夹具&x2B;NSubstitute:冻结模拟?
我试图访问注入构造函数的模拟(通过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
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
之间没有像Moq那样的分离Mock.Object
中的AutoFixture.Auto*扩展钩子提供接口的[mock]实现,即SpecimenBuilderNode
应该可以工作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>();