Выберите конкретный конструктор с помощью AutoFixtureC#

Место общения программистов C#
Ответить
Anonymous
 Выберите конкретный конструктор с помощью AutoFixture

Сообщение Anonymous »

Я использую AutoFixture и хотел бы использовать определенный конструктор.

У меня есть следующий код, и мне хотелось бы выбрать конструктор с помощью ITemplateParameterHandler.< /p>

public sealed class TemplateSegmentHandler : ITemplateSegmentHandler
{
public TemplateSegmentHandler(ITemplateIterator iterator)
: this(new TemplateParameterHandler(iterator))
{
Contract.Requires(iterator != null);
}

public TemplateSegmentHandler(ITemplateParameterHandler parameterHandler)
{
Contract.Requires(parameterHandler != null);

_parameterHandler = parameterHandler;

_parameterHandler.Ending += EndingParameter;
}

// ...
}


РЕДАКТИРОВАНИЕ:

Я хочу внедрить следующую фальшивую реализацию. (Я использую NSubstitute для создания поддельного объекта.)

public sealed class CustomTemplateParameter : ICustomization
{
private readonly ITemplateParameterHandler _context;

public CustomTemplateParameter()
{
_context = Substitute.For();
}

public void Customize(IFixture fixture)
{
fixture.Customize(c => c.FromFactory(() => _context));
}

public CustomTemplateParameter SetCatchAll(bool isCatchAll)
{
_context.IsCatchAll.Returns(isCatchAll);

return this;
}
}


Вот как я пытаюсь его использовать.

[Fact]
public void Should_return_true_when_the_segment_has_a_catch_all_parameter()
{
TemplateSegmentHandler segmentHandler = new Fixture().Customize(new TemplateSegmentHandlerFixture())
.Customize(new CustomTemplateParameterHandler()
.SetCatchAll(true))
.Create();

segmentHandler.Parameter.Start();
segmentHandler.Parameter.End();

segmentHandler.HasCatchAll.Should().BeTrue();
}


Но он по-прежнему выбирает неправильный конструктор, и я получаю следующую ошибку.

Ploeh.AutoFixture.ObjectCreationExceptionAutoFixture was unable to create an instance from Somia.Web.Routing.Template.ITemplateIterator, most likely because it has no public constructor, is an abstract or non-public type.

Request path:
Somia.Web.Routing.Template.TemplateSegmentHandler -->
Somia.Web.Routing.Template.ITemplateIterator iterator -->
Somia.Web.Routing.Template.ITemplateIterator


Подробнее здесь: https://stackoverflow.com/questions/258 ... utofixture
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»