2016-07-28 9 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())) 
     { 
     } 
    } 
関連する問題