OOTB, AutoFixture пытается найти общедоступные конструкторы или метод статической фабрики, который может создать экземпляр класса. Поскольку у вас нет RecordedEvent
и вы не можете добавить открытый конструктор, вам нужно научить автофиксированию, как его создавать. Для этого можно использовать механизм Настройки .
Прежде всего, вы создаете настройку , которая может найти все внутренние конструкторы для типа:
public class InternalConstructorCustomization : ICustomization
{
public void Customize(IFixture fixture)
{
fixture.Customize<RecordedEvent>(c =>
c.FromFactory(
new MethodInvoker(
new InternalConstructorQuery())));
}
private class InternalConstructorQuery : IMethodQuery
{
public IEnumerable<IMethod> SelectMethods(Type type)
{
if (type == null) { throw new ArgumentNullException(nameof(type)); }
return from ci in type.GetTypeInfo()
.GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic)
select new ConstructorMethod(ci) as IMethod;
}
}
}
затем вы применяете его к вашему Fixture
:
var fixture = new Fixture()
.Customize(new InternalConstructorCustomization());
и после этого вы можете создавать экземпляры класса RecordedEvent
:
var recordedEvent = fixture.Create<RecordedEvent>(); // does not throw