2016-02-05 1 views
1

Я пытаюсь настроить данные, сгенерированные в классе .., где свойство другое класс.Как использовать AutoFixture для генерации данных для свойства, являющегося классом?

например.

public class Foo 
{ 
    public string Id { get; set; } 
    public Baa Baa { get; set; } 
} 


public class Baa 
{ 
    // 30 properties which are strings, ints, etc. 
} 

мне было интересно, если я мог бы сделать что-то вроде этого ...

var fixture = new Fixture(); 
return fixture.Build<Foo>() 
    .With(x => x.Id, $"Foo-{fixture.Create<int>()}") 
    .With(x => x.Baa, CreateSomeCustomBaaUsingAutofixture) 
    .Create(); 

, а затем ..

private Baa CreateSomeCustomBaaUsingAutofixture() 
{ 
    var fixture = new Fixture(); 
    return fixture.Build<Baa>() 
     .With(lots of customizations here) 
    .Create(); 
} 

Есть ли уборщик способ сделать это? Или это .. что в основном единственный/рекомендуемый способ?

Я понимаю, что AutoFixture может автоматически создать экземпляр Baa для меня и данные для свойств. Я просто надеялся просто настроить его немного больше.

+0

Related: http://stackoverflow.com/q/27815288/126014 –

+0

Возможно, релевантно: http://stackoverflow.com/a/5398653/126014 –

+0

Вам нужно, чтобы 'Baa' был настраивается по соглашению или вам нужно настроить его по-разному для каждого тестового примера? –

ответ

1

Поскольку вы хотите сконфигурировать Baa по соглашению, вы можете просто сделать это. Это может выглядеть следующим образом:

fixture.Customize<Baa>(c => c 
    .With(x => x.Baz, "Corge") 
    .With(x => x.Qux, "Garply")); 

Всякий раз, когда вы создаете Foo объект, то Baa свойства будет иметь значение, созданное в соответствии с этими правилами:

var foo = fixture.Create<Foo>(); 
Console.WriteLine(foo.Baa.Baz); 
Console.WriteLine(foo.Baa.Qux); 

распечатки:

Corge 
Garply 
+0

Как 'fixture.Create ();' знать о том, как создать 'Baa'? это потому, что это тот же экземпляр fixture И 'fixture.Customize ....' приходит первым ... Можете ли вы обновить код, чтобы выделить это? (если ты это имеешь в виду) ? Плз сэр? –

+0

Kewl - Думаю, я понял это сейчас. Я сделал этот скрипт .NET: https://dotnetfiddle.net/MqneEZ ... Итак, я создаю прибор, определяю мои настройки ... а затем создайте 'Create' в конце? –

+0

@ Pure.Krome Это правильно. Информация о бонусе: если вы это сделаете, вы должны [инкапсулировать свои настройки] (http://blog.ploeh.dk/2011/03/18/EncapsulatingAutoFixtureCustomizations). –

Смежные вопросы