2013-05-30 4 views
5

:AutoFixture는 : PropertyData 및 이기종 매개 변수는 다음의 시험을 감안할 때

[Theory] 
[PropertyData("GetValidInputForDb")] 
public void GivenValidInputShouldOutputCorrectResult(
    string patientId 
    , string patientFirstName 
) 
{ 
    var fixture = new Fixture();   

    var sut = fixture.Create<HtmlOutputBuilder>(); 

    sut.DoSomething(); 
    // More code 
} 

내가 자신의 클래스에 고정 생성을 캡슐화 할, 유사 뭔가 :

[Theory] 
[CustomPropertyData("GetValidInputForDb")] 
public void GivenValidInputShouldOutputCorrectResult(
    string patientId 
    , string patientFirstName 
    , HtmlOutputBuilder sut 
) 
{ 
    sut.DoSomething(); 
    // More code 
} 

문제는 난 것입니다 PropertyData을 사용하고 후자는 두 개의 입력 매개 변수를 제공합니다. 사실 필자의 조명기를 매개 변수로 자동 생성하려고 할 때 예외가 발생합니다. 이 문제를 해결 할 수있는 옵션은 무엇

public class CustomPropertyDataAttribute : CompositeDataAttribute 
{ 
    public CustomPropertyDataAttribute(string validInput) 
     :base(new DataAttribute[] 
      { 
       new PropertyDataAttribute(validInput), 
       new AutoDataAttribute(new Fixture() 
        .Customize(new HtmlOutpuBuilderTestConvention())), 
      }) 
    { 

    } 
} 

: 여기

는 CustomPropertyData입니까?

+0

'CustomPropertyData'는 어떻게 보이나요? –

+0

@NikosBaxevanis OP를 업데이트했습니다. http://nikosbaxevanis.com/2012/07/27/composite-xunit-net-data-attributes/에 따라 코드를 작성하려고했습니다. – DavidS

답변

3

당신은 아래와 같이 PropertyDataAttribute에 데이터를 제공 할 필요가 다음 patientId 값이 될 것

public static IEnumerable<object[]> GetValidInputForDb 
{ 
    get 
    { 
     yield return new object[] 
     { 
      "123", 
      "abc" 
     }; 
    } 
} 

patientFirstName 값은 ABC되고 SUT 값에 의해 자동으로 공급 될 예정이다 자동 보정.

CustomPropertyDataAttribute가 좋아 보인다.

+0

좋아, 내가 제안한 것을 거의했기 때문에 다시 드로잉 보드로 돌아가 보자. 그러나, 나는 예외를 얻었다. 나는 그것을 다시 시도하고 필요하다면 그것을 자랑하려고 노력할 것이다. 당신의 도움을 주셔서 감사합니다. – DavidS

+0

'HtmlOutpuBuilderTestConvention'의 문제이거나 xUnit.net 포럼의'PropertyDataAttribute'를 대상으로 한 질문 일 것 같습니다.'HtmlOutputBuilder'를'IDisposable','HtmlOutpuBuilderTestConvention'을'AutoMoqCustomization'으로 바꾸면 테스트 할 수 있습니다. 테스트가 실행되는지 확인하십시오. –

+0

조언 해 주셔서 감사합니다. 나는 아직도 당신에게 제안을 시도해야하지만, 내가 틀린 것을 알아 냈을 때 나는 당신에게 돌아갈 것이다. – DavidS