2017-01-20 17 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 인터페이스가 :

구조적 두 객체의 동등성을 비교하면서 주제 아래 테스트의 구성원을 포함하는 정의하는 규칙을 나타냅니다. 이 인터페이스를 구현

한번에 모든 내부 특성을 배제 할 수 있도록 (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