2016-11-25 4 views
1

Я делаю свои тесты с помощью AutoFixture, но мои интерфейсы возвращают IPagedList вместо IList. Проблема в том, что AutoFixture генерирует пустые выгружаемые списки. Я новичок в AutoFixture, поэтому, вероятно, мое решение (которое, кстати, не работает должным образом) не самое лучшее. Смотрите, что я сделал:Настройка AutoFixture для PagedList

public class PagedListCustomization<TEntity> : ICustomization 
    { 
     public void Customize(IFixture fixture) 
     { 
      fixture.Customize<IPagedList<TEntity>>(c => c.FromFactory(
       () => 
       { 
        var list = fixture.CreateMany<TEntity>(); 
        int pageSize = fixture.Create<int>(); 
        int pageIndex = fixture.Create<int>(); 
        return list.ToPagedList(pageIndex, pageSize); 
       })); 
     } 
    } 


....... 


var fixture = new Fixture() 
.Customize(new AutoMoqCustomization()) 
.Customize(new MvcCustomization()) 
.Customize(new MultipleCustomization()) 
.Customize(new PagedListCustomization<TEntity>()); 

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

Мои вопросы: 1) Как я могу управлять pageIndex меньше, чем list.Count() и больше нуля? 2) Есть ли более подходящий способ настроить это?

Большое вам спасибо! Существует так мало документ о AutoFixture ...

Обновление: Я до сих пор использую это, но выглядит излишеством:

int pageSize = new Generator<int>(fixture).First(n => n > 0 && n <= list.Count); 
       int pageIndex = new Generator<int>(fixture).First(n => n > 0 && n < list.Count/pageSize); 

ответ

0

The order of customizations matter. Я не пробовал, но это, вероятно, поможет переназначения пользовательских настроек:

var fixture = new Fixture() 
    .Customize(new PagedListCustomization<TEntity>()) 
    .Customize(new AutoMoqCustomization()) 
    .Customize(new MvcCustomization()); 

Кроме того, вы не должны MultipleCustomization так AutoFixture 3.0.

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