2014-11-20 1 views
0

SUT (system under test)가 다양한 구성을 수행 할 수있는 단위 테스트를 작성하고 있습니다. 각 조합에 대한 매개 변수를 추가하는 대신, 나는 대안적인,보다 깨끗한 접근법을 채택하기로 결정했다. 모르는 사람들을 위해 Fixture 개체는 무작위 테스트 값을 시드하는 AutoFixture라는 라이브러리에 있습니다. , 나는 Without 메서드 호출을 통해 규칙을 무시 세트와 Locate 객체를 생성하기 위해 Build 방법을 사용하려고 해요 당신이 할 수매개 변수를 통해 추가 개체 구성을 수행하려면 어떻게합니까?

[Test] 
    public void Test() 
    { 
     var locate = Build(x => x.With(xx => xx.TicketNo, 123)); 

     Assert.AreEqual(123, locate.TicketNo); 
    } 

    private Locate Build(Action<ICustomizationComposer<Locate>> customizationAction) 
    { 
     var fixture = new Fixture(); 
     var customizationComposer = fixture.Build<Locate>(); 
     customizationAction(customizationComposer); 
     var postProcessComposer = customizationComposer 
      .Without(x => x.Attachments) 
      .Without(x => x.Comments) 
      .Without(x => x.Reviews) 
      .Without(x => x.ScheduledCrew) 
      .Without(x => x.PendingDecision) 
      .Without(x => x.FinalDecision) 
      .Without(x => x.ConflictResolution); 

     return postProcessComposer.Create(); 
    } 

-

여기 내 실패 테스트입니다. 이것은 각 테스트에 필요한 기준 객체입니다. 각 테스트에는 With 메서드 호출을 통해 추가 필드 또는 하드 코드 필드 값을 무시할 수있는 옵션이 있습니다.

는 내가 내 Build 람다 매개 변수 대신 123에 TicketNo 속성을 설정하는 설정 때문에 통과 기대

는 테스트가 실패 의 임의의 정수와 AutoFixture 씨앗 TicketNo 때문이다.

어떻게하면됩니까?

답변

0

솔루션!

private Locate Build(Func<IPostprocessComposer<Locate>, IPostprocessComposer<Locate>> action) 
    { 
     var customizationComposer = _fixture.Build<Locate>(); 
     var postProcessComposer = customizationComposer 
      .With(x => x.TicketNo, DateTime.Now.ToFileTime()) 
      .With(x => x.On1CallNotified, false) 
      .Without(x => x.Attachments) 
      .Without(x => x.Comments) 
      .Without(x => x.Reviews) 
      .Without(x => x.ScheduledCrew) 
      .Without(x => x.PendingDecision) 
      .Without(x => x.FinalDecision) 
      .Without(x => x.ConflictResolution); 

     postProcessComposer = action(postProcessComposer); 

     return postProcessComposer.Create(); 
    } 
관련 문제