2017-12-12 6 views
0

SpecFlow 단계를 StepArgumentTransformation에 따라 변환 했으므로 여러 프리미티브 매개 변수를 처리 할 필요가 없지만 변형 메서드로 작성된 단일 복합 매개 변수를 사용할 수 있습니다.단계 인수 변환을 사용할 때 SpecFlow 단계 메서드에서 불필요한 매개 변수를 제거하려면 어떻게합니까?

하지만 "매개 변수 개수 불일치"예외가 발생하기 때문에 단계에서 기본 매개 변수를 제거 할 수 없다는 것을 알았습니다.

[Given("(something (\d) (\d))")] 
public void Step(Something something) 
{ 
    // Does not work (parameter count mismatch) 
} 

[Given("(something (\d) (\d))")] 
public void Step(Something something, int x, int y) 
{ 
    // Works, but is slightly confusing due to unused parameters 
} 

[StepArgumentTransformation("something (\d) (\d)")] 
public Something Transform(int x, int y) 
{ 
    var something = new Something(x, y); 
    return something; 
} 
나는이 단계 방법에 xy 매개 변수를 제거 할 수있는 방법

?

답변

0

바인딩의 정규식을 수정해야합니다. 당신은 여기에서 예를 찾을 수 있습니다

[Given("the coordinates are '(.*)'")] 
public void Step(Something something) 
{ 
    // Does not work (parameter count mismatch) 
} 

[StepArgumentTransformation("X:(\d)/Y:(\d)")] 
public Something Transform(int x, int y) 
{ 
    var something = new Something(x, y); 
    return something; 
} 

Usage: 

Scenario: coordinate system 

    Given the coordinates are 'X:1/Y:2' 

:

여기 구체적인 예이다 https://github.com/techtalk/SpecFlow-Examples/tree/master/SpecFlow.Examples.StepArgumentTransformation

단계 인수 변환에 대한 문서는 여기 : http://specflow.org/documentation/Step-Argument-Conversions/

+0

쿨, 감사합니다! 실제로 괄호는 SpecFlow에 의해 사용되어 그들과 함께 놀면 트릭을 수행 한 것 같다 :'(something \ d \ d)'는 하나의 인자 (한쌍의 괄호)에 매핑으로 해석되고, SpecFlow는 변환을 사용한다 그 논증에 대한 가치를 제공한다. –

관련 문제