Я использую AutoFixture с AutoMoqCustomization в своих тестах.
У меня есть сервис, который зависит от тестируемой системы:
ISomeService
{
Task<IEnumerable<int>> Get();
}
Я называю это внутри тестируемой системы:
var collection = await _someService.Get(); // collection is empty
Меня не волнует, что внутри коллекции, но мне нужно, чтобы коллекция не была пустой. Я так делаю:
_fixture.Freeze<Mock<ISomeService>>()
.Setup(service => service.Get())
.Returns(Task.FromResult(_fixture.CreateMany<int>()));
Похоже, это нужно делать с настройкой. Я создал и зарегистрировал один:
public class TaskCollectionCustomization : ICustomization
{
public void Customize(IFixture fixture)
{
fixture.Customizations.Add(
new FilteringSpecimenBuilder(
new TaskCollectionBuilder(),
new GenericTypeSpecification(typeof(Task<>))));
}
private class TaskCollectionBuilder : ISpecimenBuilder
{
public object Create(object request, ISpecimenContext context)
{
// never enters here
}
}
}
Проблема в том, что метод Create никогда не вводится. Есть идеи или готовые решения?
ИЗМЕНИТЬ
Добавление источника GenericTypeSpecification
public class GenericTypeSpecification : IRequestSpecification
{
private readonly Type _type;
public GenericTypeSpecification(Type type)
{
_type = type;
}
public bool IsSatisfiedBy(object request)
{
var requestedType = request as Type;
return requestedType != null &&
requestedType.IsGenericType &&
requestedType.GetGenericTypeDefinition() == _type;
}
}
GenericTypeSpecification
? - person Mark Seemann   schedule 06.03.2015