我试图访问注入(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的工作原理,我相信:

  • NSubstitute在MockMock.Object之间没有分隔符,像Moq一样
  • AutoFixture.Auto *扩展钩在SpecimenBuilderNode中以提供接口(interface)的[mocked]实现,即fixture.Create<IFileUtils>()应该可以工作
  • Freeze等同于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/

    10-16 19:24