У меня есть объектная модель, использующая Open Generics (Да-да, теперь у меня есть две проблемы; вот почему я здесь.:):-
public interface IOGF<T>
{
}
class C
{
}
class D
{
readonly IOGF<C> _ogf;
public D( IOGF<C> ogf )
{
_ogf = ogf;
}
}
Я пытаюсь заставить AutoFixture генерировать анонимные экземпляры D
выше. Однако сам по себе AutoFixture не имеет встроенной стратегии для построения IOGF<>
, поэтому мы наблюдаем:
public class OpenGenericsBinderDemo
{
[Fact]
public void X()
{
var fixture = new Fixture();
Assert.Throws<Ploeh.AutoFixture.ObjectCreationException>( () =>
fixture.CreateAnonymous<D>() );
}
Основное сообщение::
Ploeh.AutoFixture.ObjectCreationException :AutoFixture не удалось создать экземпляр из IOGF `1[C], скорее всего потому, что он не имеет общедоступного конструктора, является абстрактным или не -общедоступным типом.
Я буду рад предоставить конкретную реализацию:
public class OGF<T> : IOGF<T>
{
public OGF( IX x )
{
}
}
public interface IX
{
}
public class X : IX
{
}
И связанную с ней привязку:
fixture.Register<IX,X>();
Как мне (и следует ли смотреть на проблему таким образом?? )пройти следующий тест?
public class OpenGenericsLearning
{
[Fact]
public void OpenGenericsDontGetResolved()
{
var fixture = new Fixture();
fixture.Inject<IX>( fixture.Freeze<X>() );
// TODO register or do something that will provide
// OGF<C> to fulfill D's IOGF<C> requirement
Assert.NotNull( fixture.CreateAnonymous<D>());
}
}
(На сайте codeplex есть обсуждения и вопросы по этому поводу -Мне просто нужно было быстро реализовать это, и я готов удалить это, если это просто плохая идея и/или я что-то пропустил)
РЕДАКТИРОВАТЬ 2:(См. также комментарий к ответу Марка )(, по общему признанию, надуманный )контекст здесь представляет собой приемочный тест на большом «почти полной системе» граф объекта System Under Test, а не на небольшом (контролируемом /легко найти :)пару или тройку классов в сценарии модульного или интеграционного тестирования. Как упоминалось во вводном утверждении вопроса о себе -, я не совсем уверен, что этот тип теста вообще имеет смысл.