2013-01-16 4 views
0

그래서 SpecFlow를 사용하여 테스트중인 MVC 앱으로 작업하고 있습니다. here으로 설명한 [RequiredIf(prop, val)] 구현을 사용합니다.SpecFlow 유닛 테스팅의 유효성 검사기에 속성 바인딩하기

그러나 '약간의'문제가 발견되었습니다. 웹 페이지에서 유효성 검사가 제대로 작동하지만 단위 테스트가 중단됩니다. 조사 결과, 속성의 IsValid() 메서드가 우리 단위 테스트에서 직접 호출되는 것으로 나타났습니다. 속성이 유효성 검사기에 바인딩되지 않았기 때문일 수 있습니다.

블로그에서 필자는 RequiredIf 속성을 유효성 검사기에 등록하기위한 설정 단계를 따랐습니다. 그러나 특정 단위 테스트의 목적을 위해 테스트 설정에서 유효성 검사를 바인딩 할 위치를 찾아야합니다.

내가 시도한 몇 가지 더 또는 덜 논리적 옵션 :

[Binding] 
public class TestSteps 
{ 
    // Every test has to call this helper to load up the controller... 
    private void GoToHome() 
    { 
     // SNIP: Unimportant 
     DataAnnotationsViewModelValidatorProvider.RegisterAdapter(..., ...); 
    } 
} 

...뿐만 아니라 테스트 스위트 파일에 ... 그러나

// See attribute for why I figured this may be a logical choice. 
[BeforeScenario] 
public void Setup() 
{ 
    DataAnnotationsViewModelValidatorProvider.RegisterAdapter(..., ...); 
} 

... 어떤 이유로 든 어느 지역도 이 RequiredIfValidator()에 바인딩되지 않습니다.

질문 : 단위 테스트의 경우 단위 테스트에서 RequiredIf() 인 경우 장식 된 속성의 유효성을 올바르게 검사 할 수 있도록 속성 -> 유효성 검사기 바인딩을 어디에 배치해야합니까?

답변

0

MVC 유효성 검사에 익숙하지 않아서 작동하지 않을 수도 있습니다.

그러나, 나는 당신이 혼자 NUnit과를 사용한다면이

[FixtureSetup] 
public void ....() 
{ 
    DataAnnotationsViewModelValidatorProvider.RegisterAdapter(..., ...); 
} 

같은 작업을 수행 할 수 있습니다 추측 것 그리고 그 순간에 당신은 실제로 전체 인 바인딩,를 통해 검증을 추가 반사 도망. 당신이 자동 생성 xxxxx.feature.cs에 보면 그러나

는 클래스가 실제로 분명히 우리가 편집 할 수 없습니다

[System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "1.8.1.0")] 
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 
[NUnit.Framework.TestFixtureAttribute()] 
[NUnit.Framework.DescriptionAttribute("xxxxx")] 
public partial class xxxxxFeature 
{ 

로 정의됩니다 볼 수 있습니다 파일, 그러나 우리는 다른 파일을 만들 수 있습니다 부분 클래스에서 우리가 좋아하는 것을 구현합니다. 당신이 시도 더 몇 군데가 다른 건 몰라도 xxxxx.partial.cs

public partial class xxxxxFeature 
{ 
    [FeatureSetup] 
    .... 

에서

. 행운을 빕니다.

+0

제안 해 주셔서 감사합니다. 지금은, 더 이상 책임을 부여하지 않고 my.IsValid() 구현체에 더 추가하여 등록을하지 않기로 결정했습니다. 답변을 생각해 주셔서 고맙습니다. 심지어 우리는 하나도 생각해 낼 수 없었습니다. –

관련 문제