2016-07-28 5 views
1

모든 목록에 동일한 키가 있어야합니다AutoFixture 여러 목록 <T> 년대와 인터페이스 내가 조롱 할 필요가 내가 인터페이스를

public interface IDataAccess 
{ 
    List<StaffItem> GetStaff(); 
    List<RankItem> GetRank(); 
    List<FleetItem> GetFleet(); 
    List<ContractItem> GetContract(); 
    List<BaseItem> GetBase(); 
} 

문제를이 목록에 사용되는 클래스의 각각을 가지고있다 공통 속성. 일치해야합니다, 나는이 모의 객체를 생성하는 동안 공통적으로 Id과 같은 인터페이스를 가지고있는 클래스를 테스트 할 수 있도록하는 데 정말로 고심하고 있습니다.

감사합니다.

답변

1

AutoFixture는 특정 조건이 충족되면 표본을 고정시킵니다. [Frozen] 특성은 표본을 고정하기 위해 일 때 을 결정하는 Matching 매개 변수를받습니다. 아래 예제에서는 staffItem.Id 속성을 확인할 때 id 매개 변수가 고정되어 있습니다. 같은 값이 주입된다 rankItem.Id :

동일한기구 조롱 라이브러리 고급 시나리오에 사용될 수
[Theory, AutoData] 
    public void MatchByIdTest(
     [Frozen(Matching.PropertyName)]int id, 
     StaffItem staffItem, 
     RankItem rankItem) 
    { 
     Assert.Equal(staffItem.Id, rankItem.Id); 
     Assert.NotEqual(staffItem.SomeProp, rankItem.SomeProp); 
    } 

    public class StaffItem 
    { 
     public int Id { get; set; } 
     public int SomeProp { get; set; } 
    } 

    public class RankItem 
    { 
     public int Id { get; set; } 
     public int SomeProp { get; set; } 
    } 

예컨대 NSubstitute. 샘플은 아래와 일부 데이터로 채워 AutoConfiguredNSubstituteCustomization 모의 객체를 사용하지만 모든 Id 특성에 동일한 ID 를 분사 :

[Theory, AutoConfigNSubstituteData] 
    public void MatchByIdTestWithAutoConfigNSubstitute(
     [Frozen(Matching.PropertyName)]int id, 
     IDataAccess da) 
    { 
     var staff = da.GetStaff().First(); 
     var rank = da.GetRank().First(); 

     Assert.Equal(staff.Id, rank.Id); 
     Assert.NotEqual(staff.SomeProp, rank.SomeProp); 
    } 

    internal class AutoConfigNSubstituteDataAttribute : AutoDataAttribute 
    { 
     public AutoConfigNSubstituteDataAttribute() 
      : base(new Fixture() 
        .Customize(new AutoNSubstituteCustomization()) 
        .Customize(new AutoConfiguredNSubstituteCustomization())) 
     { 
     } 
    }