2014-02-02 3 views
1

Для наших сценариев SpecFlow нам нужно перехватить аргументы строки до того, как они перейдут к методам шагов, так как мы выполняем некоторую пользовательскую обработку этих значений. Я пытаюсь добавить общий атрибут StepArgumentTransformation, который я предполагаю, что должен захватить любой строковый аргумент, но он никогда не получить удар:Использование StepArgumentTransformation для преобразования * any * string аргумента в другую строку

[Binding] 
public class Transforms 
{ 
    [StepArgumentTransformation] 
    public string StringTransform(string value) 
    { 
     // Transform code is here... 
    } 
} 

Единственное, что я могу думать о том, что это не возможно, чтобы просто сделать общая строка -> строковое преобразование?

У кого-нибудь есть идеи? Благодаря!

+0

Было бы интересно узнать, почему вы не просто указать строку, которая является результатом трансформации? –

+0

Я не уверен, что вы имеете в виду? – Amberite

+0

Если вы знаете, что строка «X» будет преобразована, чтобы иметь значение «Y», то почему бы просто не указать «Y» в сценарии? Вероятно, я бы понял, почему именно вы хотите сделать родовое преобразование, если бы включили примерный сценарий в свой вопрос. –

ответ

3

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

The following conversions can be performed by SpecFlow (in the following precedence): 
- no conversion, if the argument is an instance of the parameter type (e.g. the parameter type is object or string) 
- step argument transformation 
- standard conversion 

обходные бы определить пользовательский тип с одним свойством удерживать значение пользовательской строки:

public class CustomString 
{ 
    public string Value {get; set;} 
} 

Теперь вы можете использовать атрибут для преобразования строка, которая соответствует определенному регулярному выражению для этого настраиваемого класса.

Дополнительная информация: http://www.specflow.org/documentation/Step-Argument-Conversions/

+0

Спасибо! Я в значительной степени полагал, что не будет никакой возможности использовать string -> string из-за встроенной функциональности SpecFlow. Это, я думаю, целесообразное обходное решение. – Amberite

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