AutoFixture :Настройка конструктора образцов Open Generics

У меня есть объектная модель, использующая 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, а не на небольшом (контролируемом /легко найти :)пару или тройку классов в сценарии модульного или интеграционного тестирования. Как упоминалось во вводном утверждении вопроса о себе -, я не совсем уверен, что этот тип теста вообще имеет смысл.

7
задан Ruben Bartelink 11 April 2012 в 07:39
поделиться