如何解决我怎么能覆盖 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");
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。