我怎么能覆盖 AutoFixture AutoMoqCustomization

How could I override AutoFixture AutoMoqCustomization

我使用 AutoMoqCustomization 创建带有数据的接口实例。它工作正常,但现在我需要用我的自定义值覆盖一个成员。这就是我想要做的:

public interface ITest
{
    string Test1();
    string Test2();
}

class Program
{
    static void Main(string[] args)
    {
        var fixture = new Fixture();
        var customization1 = new CompositeCustomization(
            new AutoMoqCustomization {ConfigureMembers = true}, new Test2Customization());
        var customization2 = new CompositeCustomization(
            new Test2Customization(), new AutoMoqCustomization { ConfigureMembers = true });
        fixture.Customize(customization1);
        //fixture.Customize(customization2);
        //fixture.Customize(new AutoMoqCustomization { ConfigureMembers = true });
        var test = fixture.Create<ITest>();
        Console.WriteLine($"test1 {test.Test1()}");
        Console.WriteLine($"test2 {test.Test2()}");
    }

    private class Test2Customization : ICustomization
    {
        public void Customize(IFixture fixture)
        {
            fixture.Customize<Mock<ITest>>(mock => mock
                .Do(m => m.Setup(t => t.Test2()).Returns("test2")));
        }
    }
}

所以在这里我想得到这样的东西:

test1 f057a124-e821-4c24-acaa-ed76a4820e8b
test2 test2

但我明白了

test1
test2 test2

对于定制 1 和定制 2。我怎样才能实现我想要的行为?

我是这样做的:

public interface ITest
{
    string Test1();
    string Test2();
}

class Program
{
    static void Main(string[] args)
    {
        var fixture = new Fixture();
        fixture.Customize(new AutoMoqCustomization());
        var test = fixture.Create<ITest>();
        Console.WriteLine($"test1 {test.Test1()}");
        Console.WriteLine($"test2 {test.Test2()}");
    }
}

public class AutoMoqCustomization : ICustomization
{
    public void Customize(IFixture fixture)
    {
        if (fixture == null) throw new ArgumentNullException(nameof(fixture));

        ISpecimenBuilder mockBuilder = new MockPostprocessor(
            new MethodInvoker(
                new MockConstructorQuery()));

        mockBuilder = new Postprocessor(
            builder: mockBuilder,
            command: new CompositeSpecimenCommand(
                new StubPropertiesCommand(),
                new MockVirtualMethodsCommand(),
                new AutoMockPropertiesCommand(),
                new CustomSpecimenCommand()));

        fixture.Customizations.Add(mockBuilder);
        fixture.ResidueCollectors.Add(new MockRelay());
    }

    private class CustomSpecimenCommand : ISpecimenCommand
    {
        public void Execute(object specimen, ISpecimenContext context)
        {
            Handle((dynamic)specimen);
        }

        private void Handle(object mock)
        {
        }

        private void Handle(Mock<ITest> mock)
        {
            mock.Setup(m => m.Test2()).Returns("test2");
        }
    }
}