I use AutoMoqCustomization
to create interface instances with data. It worked fine but now I need to override one member with my custom value. This is what I am trying to do:
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")));
}
}
}
So here I want to get something like this:
test1 f057a124-e821-4c24-acaa-ed76a4820e8b
test2 test2
but I get
test1
test2 test2
for both customization1 and customization2. How can I implement the behaviour I want?
This is how I did that:
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");
}
}
}