2017-01-20 9 views
1

ShouldBeEquivalentToを実行するときにクラスの内部プロパティを無視する方法はありますか?ShouldBeEquivalentToの内部プロパティを無視する

たとえば、以下のクラスでは、オブジェクトグラフ比較からMetaDataプロパティを除外します。

public class SomeObject 
{ 
    Public string SomeString { get; set; } 
    internal MetaData MetaData { get; set; } 
} 

私は以上1つの内部プロパティを持っていると退屈になり、すべてのこれらのプロパティのためにこれを設定する可能性があるため

someObject.ShouldBeEquivalentTo(someOtherObject, options =>  
    options.Excluding(info => info.SelectedMemberPath == "MetaData") 

を使用しないことを好むだろう。

答えて

1

FluentAssertionsライブラリ内IMemberSelectionRuleインタフェースがある:

は、構造的等価2つのオブジェクトを比較しながら被写体被試験のメンバーが含まれるように定義するルールを表します。このインタフェースを実装

は(IsAssemblyプロパティがtrueある)一度にすべて内部特性を除外することを可能にする:

internal class AllExceptNonPublicPropertiesSelectionRule : IMemberSelectionRule 
    { 
    public bool IncludesMembers 
    { 
     get { return false; } 
    } 

    public IEnumerable<SelectedMemberInfo> SelectMembers(
     IEnumerable<SelectedMemberInfo> selectedMembers, 
     ISubjectInfo context, 
     IEquivalencyAssertionOptions config) 
    { 
     return selectedMembers.Except(
     config.GetSubjectType(context) 
      .GetNonPrivateProperties() 
      .Where(p => p.GetMethod.IsAssembly) 
      .Select(SelectedMemberInfo.Create)); 
    } 
    } 

今ルールは、ユニットテストに利用することができる。

someObject.ShouldBeEquivalentTo(someOtherObject, options => options.Using(
    new AllExceptNonPublicPropertiesSelectionRule())); 
+0

素晴らしい、ありがとう! – Lejdholt

関連する問題