2017-01-30 9 views
0

최근에 FluentAssertions에서 내부 개체 상태 유효성 검사를 피하기 위해을 설명하는 SO question이라고 대답했습니다. 이제는 동일한 문제에 직면하여 FluentAssertions가 내부 속성 OOTB의 유효성을 검사하는 이유는 무엇입니까?FluentAssertions가 내부적으로 유효성을 검사하는 데 왜 동일해야합니까?

public class Class1 
{ 
    [Fact] 
    public void CompareCultureInternalFields() 
    { 
     var foo1 = new Foo(); 
     var foo2 = new Foo(); 

     foo1.ShouldBeEquivalentTo(foo2); // fails 
    } 

    public object Culture { get; set; } 
} 

public class Foo 
{ 
    public Foo() 
    { 
     InternalProp = Guid.NewGuid(); 
    } 

    internal Guid InternalProp { get; } 
} 

예외 정보 :

Xunit.Sdk.XunitException: Expected member InternalProp to be {61625b04-c4e6-4e08-a45a-5ff8bb7d53e7}, but found {df589d73-e382-4104-8157-a41da2ca17f5}. 

With configuration: 
- Use declared types and members 
- Compare enums by value 
- Match member by name (or throw) 
- Be strict about the order of items in byte arrays 

foo1foo2 개체가 공개 API를 다루는 소비자 동등한 있어야하지 않나요?

+0

클래스가 다른 어셈블리/프로젝트에있는 경우 내부 속성에 액세스 할 수 없어야합니다. 클래스가 같은 어셈블리에 있으면 좋은 예가 아닙니다 – Nkosi

+0

좋은 지적입니다. 일부 자동 생성 된 내부 입력란으로 샘플을 다시 작성하면 어떻게됩니까? –

+0

이제는 무슨 뜻인지 이해합니다. – Nkosi

답변

0

나는 repo의 기원에 이르기까지 모든 것을 추적하려고 시도했지만, 분명히 항상 그랬다. 어떤면에서 internal 속성은 개념적으로 공개입니다. 공개 API에 속하지 않는 것으로 디자인하려는 경우 개인으로 설정하십시오. 이 문제를 해결해야하는 또 다른 이유는 테스트 범위가 좁은 편이 아닐 수 있다는 것입니다. 왜 일부 부동산을 공개하고 다른 부동산을 내부로 만들려고합니까? 다시 말하지만, 이것은 단지 저의 추정 일뿐입니다. 그렇게할만한 이유가있을 수 있습니다. 그래도 해당 속성은 항상 internal에서 제외 할 수 있습니다.