我试图访问注入(inject)到构造函数中的模拟类(通过Nsubstitute)。
我正在使用以下代码
var fixture = new Fixture()
.Customize(new AutoNSubstituteCustomization());
var sut = fixture.Create<MyService>();
成功创建了sut,并将名为“IFileUtils”的接口(interface)的模拟版本注入(inject)了“MyService”的构造函数中。
但是我需要访问它,所以阅读后我相信我需要卡住该对象,这样我就可以访问它了
var fileUtilMock= fixture.Freeze<Mock<IFileUtils>>();
但是我认为这段代码是Moq语法,因为找不到“模拟”。
通常,要创建类的N替代品,请执行以下操作
var fileUtilMock= Substitute.For<IFileUtils>();
但是当然这不会卡住,因此它不会被使用并注入(inject)到构造函数中。
有人可以帮忙吗?
最佳答案
根据this Mocking tools comparison article by Richard Banks的推论以及AutoMoq的工作原理,我相信:
Mock
和Mock.Object
之间没有分隔符,像Moq一样SpecimenBuilderNode
中以提供接口(interface)的[mocked]实现,即fixture.Create<IFileUtils>()
应该可以工作var result = fixture.Create<IFileUtils>(); fixture.Inject(result)
因此,您应该只能说:
var fileUtilMock = fixture.Freeze<IFileUtils>();
关于c# - 自动固定+ N替代: Freezing a mock?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17301345/