Преобразование аргумента шага Specflow для содержимого ячейки таблицы с помощью CreateInstance
Кто-нибудь решил загадку о том, как применять Преобразования пошагового аргумента SpecFlow к ячейкам таблицы вместе с SpecFlow.Assist CreateInstance / CreateSet? (код объединен здесь для экономии места)
Given a table like the following:
| Price | Zip | Effective Date |
| 10.00 | 90210 | in 2 days |
When the 'given' step executes
And the table data populates a poco
Then the effective date should be transformed into a DateTime with value of 2 days from today
[Given(@"a table like the following:")]
public void GivenATableLikeTheFollowing(Table table)
{
var temp = table.CreateInstance<Temp>();
}
internal class Temp
{
decimal Price { get; set; }
int Zip { get; set; }
DateTime EffectiveDate { get; set; }
}
[Binding]
public class Transforms
{
[StepArgumentTransformation(@"in (\d+) days?")]
public DateTime InXDaysTransform(int days)
{
return DateTime.Today.AddDays(days);
}
}
StepArgumentTransformation привязки, очевидно, не применяются к содержимому ячейки таблицы (поскольку аргумент шага имеет тип Table), но каким-то образом SpecFlow.Assist CreateInstance / CreateSet по-прежнему преобразует данные ячейки для базовых типов.
Например, если содержимое даты вступления в силу равно «11/13/2016», а не «через 2 дня», свойство EffectiveDate базового poco преобразуется в DateTime просто отлично (или int, десятичное число и т. Д.).
Я вижу некоторые другие решения, такие как применение преобразования в самом определении шага, какВот или создание StepArgumentTransformationдля всего стола, но ... очевидные минусы. Обновить:этот вопрос аналогично, но решения также избегают смешения StepArgumentTransformation с CreateInstance / CreateSet.
Есть также раздел вПомощники SpecFlow Assist Документы о расширении путем регистрации получения / сравнения значений, но в моем примере набор DateTime уже существует. Итак, возможно, пользовательский тип DateTime? Похоже, что может быть проверка StepArgumentTransformations для известных типов или что-то в этом роде.
вDateTime ретривер, что-то вроде..
public virtual DateTime GetValue(string value)
{
var returnValue = DateTime.MinValue;
// check for StepArgumentTransformations here first?
DateTime.TryParse(value, out returnValue);
return returnValue;
}
Любые идеи о том, что мне не хватает, чтобы получить StepArgumentTransformation для применения к содержимому ячейки таблицы при использовании table.CreateInstance? Или одно из упомянутых решений является лучшим / единственным способом?