2015-03-30 3 views
1

Недавно я применил this атрибут шаблона regex к одному из свойств моего класса, чтобы оценить действительные форматы url. Проблема в настоящее время произошло, что AutoFixture не может создать экземпляр этого отображения ошибкиAutoFixture, создающий свойство с правилом регулярного выражения

«AutoFixture не смог создать экземпляр из Ploeh.AutoFixture.Kernel.RegularExpressionRequest, скорее всего, потому что он не имеет открытый конструктор, является абстрактным или непубличным типом ».

Я попытался несколько предложений, как

var contact = _fixture.Build<ContactEntity>() 
    .With(c=>c.Customer.Website, 
    new SpecimenContext(_fixture) 
     .Resolve(new RegularExpressionRequest(Constants.UrlRegex))) 
    .Create(); 

и

public class WebsiteSpecimenBuilder: ISpecimenBuilder 
{ 
    public object Create(object request, 
    ISpecimenContext context) 
    { 
     var pi = request as PropertyInfo; 

     if (pi!=null && pi.PropertyType == typeof(string) 
      && (pi.Name.Equals("Email") || pi.Name.Equals("Website"))) 
     { 
      //tried both of these options 
      return (new OmitSpecimen() || "http://www.website.com"; 
     } 

     return new NoSpecimen(request); 
    } 
} 

Но я до сих пор не может получить autofixture создать класс. Я что-то упустил, чтобы создать его или слишком сложно ли это регулярное выражение для автовоспроизведения?

+0

Возможно, связано: http://stackoverflow.com/q/28706286/126014 –

+0

Какое регулярное выражение вы пытаетесь использовать? Кажется, что этот метод имеет много подобных. –

+0

Я использую версию взорванных строк в приложении .net. Я сделал небольшие изменения, чтобы работать в .net и протестировал и увидел, что он работает, как ожидалось. Я нашел более простое регулярное выражение, которое, похоже, работает с autofixture. Но сейчас возникает странная вещь. 'если (! Пи = NULL && pi.PropertyType == TypeOf (строка)) { \t если (pi.Name == "Отправить") \t { \t \t возвращение "[email protected]"; \t} \t если (pi.Name == "Сайт") \t { \t \t возврата "http://www.blah.com"; \t}} return new NoSpecimen (request); ' Autofixture, похоже, перезаписывает его' Website: "http: // 0 #" ' –

ответ

4

я, кажется, получили решение с помощью метода подгоняем как таковой:

_fixture = new Fixture(); 
_fixture.Customize<CustomerEntity>(ce => 
    ce.With(x => x.Website, "http://suchTest.verwow")); 

Это возвращает любой случай, когда клиент называется, чтобы этот сайт (или другие регулярные выражения свойств). Я действительно не знаю, имеет ли что-то в autofixture приоритет, почему это работает при настройке веб-сайта, а другие нет. Но это решение, позволяющее моему тестированию работать